1.two sum:
解法一:
function sum(arr,target){
var len = arr.length;
for(var i=0;i<len;i++){
for(var j=0;j<len;j++){
if(i!=j){
var sum = arr[i]+arr[j];
if(sum === target){
return [i,j];
}
}
}
}
}
解法二:(更优)
var twoSum = function(nums, target) {
let obj = [];
var arr = [];
for(let i = 0; i < nums.length; i++) {
let othNum = target - nums[i];
let othIndex = nums.indexOf(othNum);
if(othIndex != -1 && othIndex != i) {
arr.push( i, othIndex);
break;
}
}
return arr;
};
var arr = [2,7,3,5];
console.log(twoSum(arr,9));[0,1];
2.addTwoNumbers
数组形式传参:
[2,6,4] [5,4,3]
结果:
[7,0,8]
function ListNode(val) {
this.val = val;
this.next = null;
}
var addTwoNumbers = function(l1, l2) {
/* step() function recursively iterates through a ListNode linked list */
const step = (l1, l2, carry=0) => {
/* l1 or l2 can be null - double bang to cast to bool for null check */
const sum = (!!l1 ? l1.val : 0) + (!!l2 ? l2.val : 0) + carry
let listnode = new ListNode(sum)
/* if either l1.next exists or l2.next exists */
if ((!!l1 && !!l1.next) || (!!l2 && !!l2.next)) {
listnode.next = step(
!!l1 ? l1.next : null,
!!l2 ? l2.next : null,
sum > 9 ? 1 : 0
)
} else if (sum > 9) {
/* final carry */
listnode.next = new ListNode(1)
}
/* only keep LSD */
//这里slice的目的是假如和是两位数,保留各位,即使是一位数以可以保留个位(始终保留各位)
listnode.val = parseInt(listnode.val.toString().slice(-1))
return listnode;
}
return step(l2, l1)
};