LeetCode刷题(二)

LeetCode 是个著名的编程题库,里边有很多面试、算法题目,多刷刷对提高编程水平很有帮助,避免因为天天写业务代码而停滞不前。最近玩了下挺有意思的,决定慢慢的刷起来,在这里记录一下我的刷题过程。

相关资料:

备注:

  • 先从简单的开始刷,简单记录每道题的题目,解法和思路。
  • 因为之前并没有什么算法基础,所以很多解法可能并不是最优解。
  • 先把重点放在解题,故有些变量名并不严谨,但代码其他方面都尽可能遵循了规范,并使用ES6+的新特性。

题目

反转字符串中的单词III

思路

简单,略。

解法

/**
 * @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;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值