领扣----js算法练习
此篇是在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)
待续...............................
///////////////////////////////////////////////////////////////////////////////////////////////