ylinwind.

2020三月第一周学习记录

字数统计: 1.1k阅读时长: 4 min
2020/03/08 Share

这周主要刷题,看了node视频教程,教程比较老,4.*的版本,先搭了本地服务,demo等,后续在补充。这里主要记录下刷题记录。

  1. 分糖果
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /*
    排排坐,分糖果。

    我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。

    给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。

    然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。

    重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖果数不够(不比前一次发出的糖果多),这些糖果也会全部发给当前的小朋友。

    返回一个长度为 num_people、元素之和为 candies 的数组,以表示糖果的最终分发情况(即 ans[i] 表示第 i 个小朋友分到的糖果数)。

    */

leetcode 地址

  1. 和为**的连续整数序列
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /* 
    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

    序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

     

    示例 1:

    输入:target = 9
    输出:[[2,3,4],[4,5]]
    示例 2:

    输入:target = 15
    输出:[[1,2,3,4,5],[4,5,6],[7,8]]
     

    限制:

    1 <= target <= 10^5

    来源:力扣(LeetCode)
    */

leetcode 地址

  1. 回文数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if(x == 0){
return true;
}else{
if( x < 0 || x % 10 == 0){
return false;
}
}
let new_num = 0 ;
while(x > new_num){
new_num = x % 10 + new_num * 10;
x = Math.floor(x / 10);
}
return x == new_num || x == Math.floor(new_num / 10);//偶数位 || 奇数位
};

原理是将原数对半分,右侧的倒叙后是否和左侧的相等

  1. 有效的括号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* 
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

输入: "{[]}"
输出: true
通过次数219,379提交次数534,304

来源:力扣(LeetCode)
*/

leetcode 地址

在评论区看到最简单的做法是直接替换

1
2
3
4
5
6
7
8
9
python:  

class Solution:
def isValid(self, s):
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''

  1. 最长公共前缀
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 
编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"
示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:

所有输入只包含小写字母 a-z 。

来源:力扣(LeetCode)
*/

leetcode 地址

  1. 数组合并
1
2
3
4
5
6
7
8
9
10
11
12
13
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。

初始化 A 和 B 的元素数量分别为 m 和 n。

示例:

输入:
A = [1,2,3,0,0,0], m = 3
B = [2,5,6], n = 3

输出: [1,2,2,3,5,6]

来源:力扣(LeetCode)

leetcode 地址

  1. 数值倒叙

    不要用转字符串的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //将输入的整数倒置,假使是最大32位数

    var reverse = function(x) {
    var tempX = String(Math.abs(x));
    var len = tempX.length;
    var res = '';
    for(var i = len - 1 ; i >= 0 ; i --){
    var char = tempX.charAt(i);
    if(!(res == '' && char == 0)){
    res += ''+char;
    }
    }
    var resVal = res * (x > 0 ? 1 : -1);
    return (resVal < -Math.pow(2,31) || resVal > Math.pow(2,31) - 1 || isNaN(resVal)) ? 0 : resVal ;
    };
CATALOG