1. 程式人生 > >LeetCode刷題(二)

LeetCode刷題(二)

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;
};

題目

陣列拆分I

思路

排序,拆為多個長度為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;
};