要求: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法一:
- var num = [2, 7, 11, 15];
- function twoSum(arr, target) {
- var brr = [];
- for (var i = 0; i < arr.length-1; i++) {
- for (var j = i+1; j < arr.length; j++) {
- if (arr[i] + arr[j] == target) {
- brr[0] = j;
- brr[1] = i;
- }
- }
- }
- return brr;
- }
- let result = twoSum(num, 18);
- console.log(result)
方法二:
- var nums = [2, 7, 11, 15];
- function twoSum(arr, target) {
- var obj = {};
- var brr = [];
- //debugger;
- for (var i = 0; i < arr.length; i++) {
- let a = arr[i];
- let b = target - a;
- if (obj[a] !== undefined) {
- brr = [obj[a], i];
- } else {
- obj[b] = i;
- }
- }
- return brr;
- }
- let result = twoSum(nums, 9);
- console.log(result)
方法三:
- var nums=[2,7,11,15];
- var twoSum =function(nums,target){
- for(let i=0;i
length-1;i++){ - for(let j=i+1;j
length;j++){ - if(nums[i]+nums[j]==target){
- return [i,j];//返回他们索引下标
- }
- }
- }
- }
- let result =twoSum(nums,18);
- console.log(result);
输入:alterContext(function() {return this.greeting + ', ' + this.name + '!'; }, {name: 'Rebecca', greeting: 'Yo' })
输出:Yo, Rebecca!
方法一:
- function alterContext(fn, obj) {
- this.greeting = obj.greeting;
- this.name = obj.name;
- return this.greeting + ', ' + this.name + '!';
- }
方法二:
- function alterContext(fn, obj) {
- return fn.call(obj); //把fn的this指向obj
- }
方法三:
- function alterContext(fn, obj) {
- return fn.bind(obj)(); // 改变fn中的this,fn并不执行,预处理更改this,所以此时让它执行
- }
方法四:
- function alterContext(fn, obj) {
- return fn.apply(obj);//区别call传参方式是数组了
- }
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
方法一:
- var isPalindrome = function(x) {
- return x.toString() === x.toString().split('').reverse().join('');
- //x转字符串、字符串转数组、倒序、数组转字符串(因为字符串不能直接倒序)
- };
方法二:
- var isPalindrome = function(x) {
- if (x >= 0) {//如果是负数直接排除回文数的可能
- var X = x.toString();//把数字变成字符串
- var len = X.length;//字符串长度
- for(var i = 0; i < (len/2) ;i++) {//不用从后往前从前往后再来一次所以取一半长度循环
- if (X[i] != X[len - i - 1] ) {//如果有这里有一个元素不满足,直接返回false
- return false//525
- }
- }
- return true//排除上面循环不满足条件的数字和外面套的if排除的负数,剩下的就是回文数返回true
- }
- return false
- };
- console.log(isPalindrome(121));

- var romanToInt = function(s) {
- var sArr = s.split("");//罗马数字变数组
- function initNum (sArr) {//罗马数字的数组通过switch变成数字数组
- for (var i = 0; i < sArr.length; i++) {
- switch (sArr[i]) {
- case "I" :
- sArr[i] = 1;
- break;
- case "V" :
- sArr[i] = 5;
- break;
- case "X" :
- sArr[i] = 10;
- break;
- case "L" :
- sArr[i] = 50;
- break;
- case "C" :
- sArr[i] = 100;
- break;
- case "D" :
- sArr[i] = 500;
- break;
- case "M" :
- sArr[i] = 1000;
- break;
- }
- }
- }
- initNum (sArr)
- return sArr.reduce(function (acc,item,idx,arr) {//reduce累加数组里的数字,并且额外注意,如果小的罗马数字在大的数字左侧,就代表要减去,但我们前面累加了一次,所以要减去两次
- acc += item;
- if (arr[idx] < arr[idx + 1]) {
- acc = acc - (2 *arr[idx]);
- }
- return acc;
- },0)
- };
- console.log(romanToInt('M'));
""。示例: 输入:strs = ["flower","flow","flight"] 输出:"fl"
- var longestCommonPrefix = function(strs) {
- var re = '';
- if (!strs.length) return re;
- for (var j=0;j
0].length;j++){//第j位 - for (var i=1;i
length;i++){//第i个 - if (strs[i][j]!=strs[0][j]) return re
- }
- re += strs[0][j];
- }
- return re;
- };
- console.log(longestCommonPrefix["flower","flow","flight"]);
'(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:输入:s = "()[]{}"
输出:true
示例 3:输入:s = "(]"
输出:false
- const enumObj = {
- ")":"(",
- "]":"[",
- "}":"{",
- }
-
-
- var isValid = function(s) {
- let cache = [];
- let arr = s.split("");
- for(let i of arr){
- if(enumObj[i]){
- if(cache[cache.length - 1] === enumObj[i]){
- cache.pop()
- }else{
- cache.push(i)
- }
- }else{
- cache.push(i)
- }
- }
- return cache.length === 0
- };
- console.log(isValid("(}"));