LeetCode刷題(二)
阿新 • • 發佈:2019-01-09
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;
};