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
0 commit comments