Skip to content

Commit 5631c6f

Browse files
committed
update week01 assignment-2
1 parent f75c7c0 commit 5631c6f

3 files changed

Lines changed: 154 additions & 0 deletions

File tree

File renamed without changes.

Week01/66-plusOne.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
* @lc app=leetcode.cn id=66 lang=javascript
3+
*
4+
* [66] 加一
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* @param {number[]} digits
10+
* @return {number[]}
11+
*/
12+
13+
/**@sponge
14+
* 解法一:
15+
* 一开始的想法但是发现Number数据类型整数位超过16位,超过的部分会全部置0
16+
* 参考@gatsby-23,将Number数据类型改为ES10基本类型BigInt可以表示任意大的整数
17+
*
18+
* 1.已知传入参数必定为数值型数组
19+
* 2.将参数转换为字符型(Array.prototype.join())
20+
* 3.由字符型变为BigInt型(BigInt构造函数))
21+
* 4.进行专属于BigInt类型的数学计算
22+
* 5.计算结果再次变为字符型(String构造函数)
23+
* 6.将字符型数值变更为数组(String.prototype.split())
24+
*
25+
* runtime: 72ms beats46.22%
26+
* memory usage: 33.3MB beats 100%
27+
*/
28+
var plusOne = function(digits) {
29+
let num = BigInt(digits.join(''));
30+
// BigInt基本类型进行数学操作时,需要在数字字面量后加个n
31+
let string = String(num + 1n);
32+
let ary = string.split('');
33+
34+
return ary.map(str => Number(str));
35+
};
36+
37+
/**@sponge
38+
* 解法二:
39+
* 1.当末位为9的情况:末位为9需要进位所以当前值置0,
40+
* 继续往前看有没有需要进位的数,没有则前一位+1并return
41+
* 2.当末位不为9的情况:直接将末位+1并return
42+
* 3.当数组里的数都为9的情况:由于遍历的每个数都为9,所以全部置0,
43+
* 然后跳出循环,在数组开头插入1并return
44+
* 时间复杂度:O(n)
45+
* runtime: 72ms beats46.22%
46+
* memory usage: 32.7MB beats 100%
47+
*/
48+
var plusOne = function (digits) {
49+
let len = digits.length;
50+
51+
for (let i = len - 1; i >= 0; i--) {
52+
if(digits[i] == 9)
53+
digits[i] = 0;
54+
else {
55+
digits[i]++;
56+
return digits;
57+
}
58+
}
59+
//数组都为9的情况
60+
digits.unshift(1)
61+
return digits;
62+
};
63+
64+
/**@other
65+
* 解法三:余数法,类似的解法
66+
* 1.末位+1,将当前值置为余数,根据余数看是否需要进位:
67+
* 1-余数为0的情况:余数为0说明当前值为10,所以当前值为余数0
68+
* 2-余数不为0的情况:直接return
69+
* 2.当数组里的数都为9的情况:由于遍历的每个数都为9,所以遍历的每一位余数都为0
70+
* 最后会跳出循环往下执行,将数组长度+1,每个数置0,第一位置1并return
71+
* 时间复杂度:O(n)
72+
* runtime: 56ms beats98.1%
73+
* memory usage: 32.4MB beats 100%
74+
*/
75+
var plusOne = function(digits) {
76+
const len = digits.length;
77+
for(let i = len - 1; i >= 0; i--) {
78+
digits[i]++;
79+
digits[i] %= 10;
80+
if(digits[i]!=0)
81+
return digits;
82+
}
83+
digits = [...Array(len + 1)].map(_=>0);;
84+
digits[0] = 1;
85+
return digits;
86+
};
87+
88+
// @lc code=end

Week01/88-mergeTwoArray.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* @lc app=leetcode.cn id=88 lang=javascript
3+
*
4+
* [88] 合并两个有序数组
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* @param {number[]} nums1
10+
* @param {number} m
11+
* @param {number[]} nums2
12+
* @param {number} n
13+
* @return {void} Do not return anything, modify nums1 in-place instead.
14+
*/
15+
16+
17+
/**@sponge
18+
* 解法一:双指针
19+
* runtime:76ms,beats 34.25%
20+
* memory usage:32.9MB,beats 100%
21+
*/
22+
var merge = function(nums1, m, nums2, n) {
23+
let len = nums1.length;
24+
nums1.splice(m,len-m);
25+
console.log(nums1)
26+
let j=0;
27+
let lastIndex=0;
28+
while(j<n){
29+
let cur =nums2[j];
30+
for(let i =lastIndex;i<nums1.length;i++ ){
31+
console.log('j:',j,'cur:',cur,'i:',i,'nums1[i]:',nums1[i])
32+
if(cur<nums1[i]){
33+
nums1.splice(i,0,cur);
34+
lastIndex = i+1;
35+
break;
36+
}else if( cur==nums1[i]){
37+
nums1.splice(i+1,0,cur);
38+
lastIndex = i+2;
39+
break;
40+
}
41+
if(cur>nums1[i]&&i==nums1.length-1){
42+
nums1.push(cur);
43+
lastIndex = nums1.length-1;
44+
break;
45+
}
46+
47+
}
48+
j++;
49+
}
50+
51+
};
52+
53+
/**@sponge
54+
* 解法二:先concat->sort
55+
* 注意:需要考虑如果sort参数缺省的话,排序会按照数据的第一位的unicode码来排序
56+
* runtime:72ms,beats 54.29%
57+
* memory usage:33.2MB,beats 100%
58+
*/
59+
var merge = function(nums1, m, nums2, n) {
60+
let len = nums1.length;
61+
nums1.splice(m,len-m,...nums2);
62+
nums1.sort((a,b)=>a-b);
63+
};
64+
65+
// @lc code=end
66+

0 commit comments

Comments
 (0)