已开启
【社区学习赛】修复两数相加(n2)代码注释和文档中的描述错误 #154
guzhangMVP创建于 20 天前
【社区学习赛】修复两数相加(n2)代码注释和文档中的描述错误 #154
已开启
guzhangMVP创建于 20 天前
4 个文件变更+22-8
M【LeeCode】7. 整数反转/main.cj+16-2
@@ -10,11 +10,25 @@ main(): Int32 {
10 if(params.size >= 1) {10 if(params.size >= 1) {
11 var x: Int32 = Int32.parse(params[0])11 var x: Int32 = Int32.parse(params[0])
12 var n: Int32 = 012 var n: Int32 = 0
13+ var overflow = false
13 while(x != 0) {14 while(x != 0) {
14- n = n * 10 + x % 1015+ let digit = x % 10
16+ // 在乘以10之前检查是否会溢出,而非在溢出后检查
17+ // 原代码中n为Int32,溢出后值回绕,事后检查 n > 2147483647 永远为false
18+ // 正确做法是在乘法前判断 n*10+digit 是否超出Int32范围
19+ // Int32最大值2147483647/10=214748364余7,最小值-2147483648/10=-214748364余-8
20+ if(n > 214748364 || (n == 214748364 && digit > 7)) {
21+ overflow = true
22+ break
23+ }
24+ if(n < -214748364 || (n == -214748364 && digit < -8)) {
25+ overflow = true
26+ break
27+ }
28+ n = n * 10 + digit
15 x = x / 1029 x = x / 10
16 }30 }
17- if(n > 2147483647 || n < -2147483648) {31+ if(overflow) {
18 println(0)32 println(0)
19 } else {33 } else {
20 println(n)34 println(n)
M【LeeCode】7. 整数反转/readme.md+1-1
@@ -2,7 +2,7 @@
2 2 
3给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。3给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
4 4 
5-如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。5+如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
6 6 
7假设环境不允许存储 64 位整数(有符号或无符号)。7假设环境不允许存储 64 位整数(有符号或无符号)。
8 8
M【Leetcode】2.两数相加/n2.cj+2-2
@@ -10,7 +10,7 @@
10 10 
11仓颉语法:11仓颉语法:
12 Option类型的isSome()和isNone()语法12 Option类型的isSome()和isNone()语法
13- Option类型的??语法:a??b, 等同于:if(a.isNone()){b} else {T}13+ Option类型的??语法:a??b, 等同于:if(a.isNone()){b} else {a}
14 */14 */
15package cangjieLeetcode.n1_n10015package cangjieLeetcode.n1_n100
16import cangjieLeetcode.common.ListNode16import cangjieLeetcode.common.ListNode
@@ -38,4 +38,4 @@ class SolutionN2 {
38 t.next38 t.next
39 }39 }
40 40 
41-}41+}
M【Leetcode】2.两数相加/readme.md+3-3
@@ -1,8 +1,8 @@
1 1 
2## 第2题,两数相加2## 第2题,两数相加
3- * 题目描述:https://leetcode.cn/problems/add-two-numbers/description/3+题目描述:https://leetcode.cn/problems/add-two-numbers/description/
4## 解题思路:4## 解题思路:
5- 迭代两个List,只要满足 l1不为None、l2不为None、进位不为0 中条件之一,就一直迭代5+ 迭代两个List,只要满足 l1不为None、l2不为None、进位不为0 中条件之一,就一直迭代
6 每次迭代,sum = l1的值(如果不为空) + l2的值(如果不为空)+ 进位6 每次迭代,sum = l1的值(如果不为空) + l2的值(如果不为空)+ 进位
7 7 
8## 时间、空间复杂度:8## 时间、空间复杂度:
@@ -10,4 +10,4 @@
10 10 
11## 仓颉语法:11## 仓颉语法:
12 Option类型的isSome()和isNone()语法12 Option类型的isSome()和isNone()语法
13- Option类型的??语法:a??b, 等同于:if(a.isNone()){b} else {T}13+ Option类型的??语法:a??b, 等同于:if(a.isNone()){b} else {a}