LeetCode 是个著名的编程题库,里边有很多面试、算法题目,多刷刷对提高编程水平很有帮助,避免因为天天写业务代码而停滞不前。最近玩了下挺有意思的,决定慢慢的刷起来,在这里记录一下我的刷题过程。
相关资料:
备注:
- 先从简单的开始刷,简单记录每道题的题目,解法和思路。
- 因为之前并没有什么算法基础,所以很多解法可能并不是最优解。
- 先把重点放在解题,故有些变量名并不严谨,但代码其他方面都尽可能遵循了规范,并使用ES6+的新特性。
题目
思路
t生成map和list,s生成map。map的key为字母,value为出现次数。遍历tList,若在s中找不到字母则直接返回,若都能找到,则返回出现次数不同的那个字母。
解法
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
var findTheDifference = function(s, t) {
const tList = t.split('');
const sMap = {};
s.split('').forEach(i => {
sMap[i] !== undefined ? sMap[i]++ : sMap[i]=0;
});
let character = '';
let tMap = {};
tList.forEach(i => {
if (s.indexOf(i) < 0) {
character = i;
return;
} else {
tMap[i] !== undefined ? tMap[i]++ : tMap[i]=0;
}
});
if (character !== '') {
return character;
}
for (si in sMap) {
if (tMap[si] !== sMap[si]) {
character = si;
}
}
return character;
};
题目
思路
遍历生成map,key为数字,value为出现次数,返回只出现一次的。
解法
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
let map = {};
nums.forEach(i => {
map[i] !== undefined ? map[i]++ : map[i]=0;
});
let result = null;
for (i in map) {
if (map[i] === 0) {
result = +i;
}
}
return result;
};
题目
思路
排序,数组长度为0,1时单独判断。其他情况遍历判断前后元素是否相差1,不相差1则找到。
解法
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function(nums) {
nums.sort((a,b) => {
return a - b;
});
if (nums[0] !== 0) return 0;
let result = null;
if (nums.length === 1) {
return nums[0] === 0 ? 1 : 0;
}
nums.forEach((item ,index) => {
if (index+1 < nums.length && item+1 !== nums[index+1]) {
result = item+1;
}
});
return result ? result : nums.length;
};
题目
思路
双重遍历。
解法
/**
* @param {number[][]} A
* @return {number[][]}
*/
var transpose = function(A) {
let result = [];
for (let i=0;i<A[0].length;i++) {
let item = [];
A.forEach(j => {
item.push(j[i]);
});
result.push(item);
}
return result;
};
题目
思路
小于0肯定不是。其他情况转为数组,判断长度奇偶,然后取前后,反转并比较每项是否相等。
解法
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if (x < 0) {
return false;
}
const list = (x+'').split('');
if (list.length % 2 === 0) {
const half = list.splice(0, list.length/2);
return list.reverse().every((item, index) => {
return half[index] === item;
});
} else {
const half = list.splice(0, (list.length+1)/2-1);
list.shift();
return list.reverse().every((item, index) => {
return half[index] === item;
});
}
};