LeetCode 是个著名的编程题库,里边有很多面试、算法题目,多刷刷对提高编程水平很有帮助,避免因为天天写业务代码而停滞不前。最近玩了下挺有意思的,决定慢慢的刷起来,在这里记录一下我的刷题过程。
相关资料:
备注:
- 先从简单的开始刷,简单记录每道题的题目,解法和思路。
- 因为之前并没有什么算法基础,所以很多解法可能并不是最优解。
- 先把重点放在解题,故有些变量名并不严谨,但代码其他方面都尽可能遵循了规范,并使用ES6+的新特性。
题目
思路
简单,略。
解法
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
let list = s.split(' ');
let newList = [];
list.forEach(i => {
newList.push(i.split('').reverse().join(''));
});
return newList.join(' ');
};
题目
思路
ASCII
解法
/**
* @param {string} str
* @return {string}
*/
var toLowerCase = function(str) {
let list = str.split('');
let newStr = '';
list.map(i => {
if(i.charCodeAt(0) >= 65 && i.charCodeAt(0) <= 90) {
newStr += String.fromCharCode(i.charCodeAt(0)+32);
} else {
newStr += i;
}
})
return newStr;
};
题目
思路
0,1,2三行直接返回。后边的根据numRows遍历生成新行,新行的第一个和最后一个元素都是1,中间根据上一行的元素遍历相加得出。
解法
/**
* @param {number} numRows
* @return {number[][]}
*/
var generate = function(numRows) {
if(numRows === 0) return [];
if(numRows === 1) return[[1]];
if(numRows === 2) return[[1], [1, 1]];
let list = [[1], [1, 1]];
while(list.length < numRows) {
let lastItem = list[list.length-1];
let newRow = [1];
lastItem.map((item,index) => {
if(index < lastItem.length-1)
newRow.push(item + lastItem[index+1]);
});
newRow.push(1);
list.push(newRow);
}
return list;
};
题目
思路
排序,拆为多个长度为2的数组,然后计算。
解法
/**
* @param {number[]} nums
* @return {number}
*/
var arrayPairSum = function(nums) {
nums.sort((a, b) => {
return a - b;
});
let list = [];
while(nums.length) {
list.push(nums.splice(0, 2));
};
let result = 0;
list.map(i => {
result += Math.min(...i);
})
return result;
};
题目
思路
三个键盘行是三个字符串。every(),判断。
解法
/**
* @param {string[]} words
* @return {string[]}
*/
var findWords = function(words) {
const line1 = 'qwertyuiopQWERTYUIOP';
const line2 = 'asdfghjklASDFGHJKL';
const line3 = 'zxcvbnmZXCVBNM';
const list = words.map(i => {
return i.split('');
});
let result = [];
list.forEach(i => {
const a = i.every(j => {
return line1.indexOf(j) >= 0;
});
const b = i.every(j => {
return line2.indexOf(j) >= 0;
});
const c = i.every(j => {
return line3.indexOf(j) >= 0;
});
if (a || b || c) {
result.push(i.join(''));
}
});
return result;
};