领扣----js算法练习

2018-12-11  本文已影响0人  行走的Radish

此篇是在LeetCod的上的练习,本人很菜,如果有更好的解决方法或者错误的地方,欢迎指出,我们共同学习~~~~~

1、给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]

/*

*第一是审题,开始的时候想法是,循环nums,如果target-nums[i]的值是不是在nums中,如果存在,那么就判断存在的那个值加上nums[i]是不是等于target

*但是遇到了一个问题,当数组是3,2,4,target是6的时候,i=0,那么6-3=3,就会重复的获取了i=0,3的值,目前没想出解决方案

*这个完成的是借鉴别人的,双重循环,第二个循环是i+1,也就是第二个值,这样就避免了一重循环时,又重复使用nums[i]中的情况

*然后判断target-nums[i]是不是等于nums[j]

*/

var twoSum = function(nums, target) {

    var arr=[]

    for(var i=0; i<nums.length; i++){

      for(var j=i+1; j<nums.length; j++){

          if(target-nums[i] == nums[j]){

              arr.push(i)

              arr.push(j)

              return arr

          }

      }

}

};

twoSum([2, 7, 11, 15], 9)

2、给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

/**

* 如果转成字符串,那么负值要多出一位,所以要进行条件的设置

* 如果反转之后,大于了所在的范围,那么又要重新判断

*2的次方要怎么表达啊啊啊啊

*所以只能强硬的去把范围写出来!!!!耦合性太强,目前还没找到解决方法

*/

var reverse = function(x) {

    var str = String(x)

    if(str.charAt(0) === '-'){

        if(str.length > 11){ return 0}

        var new_str = str.slice(1, str.length)

        var fin_num = parseInt('-'+new_str.split('').reverse().join(''))

        return  fin_num < (-2147483648) ? 0 : fin_num

    }

    if(str.length > 10){ return 0}

    var num = parseInt(str.split('').reverse().join(''))

    return  num > 2147483648 ? 0 : num

};

reverse(1534236469)

3、判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

var isPalindrome = function(x) {

    var str = String(x)

    if(str.charAt(0) === '-') return false

    if(str.split('').reverse().join('') === str){

        return true

    }else{

        return false

    }

};

isPalindrome(10)

待续...............................

///////////////////////////////////////////////////////////////////////////////////////////////

上一篇下一篇

猜你喜欢

热点阅读