classSolution { publicintmyAtoi(String s) { s = s.trim(); if (s.isEmpty()) return0; intsign=1; inti=0; if (s.charAt(i) == '+' || s.charAt(i) == '-') { sign = (s.charAt(i++) == '-') ? -1 : 1; } longresult=0; while (i < s.length() && Character.isDigit(s.charAt(i))) { result = result * 10 + (s.charAt(i++) - '0'); if (result * sign >= Integer.MAX_VALUE) return Integer.MAX_VALUE; elseif (result * sign <= Integer.MIN_VALUE) return Integer.MIN_VALUE; } return (int) (result * sign); } }
结果
执行用时 : 1 ms, 击败 100.00% 使用 Java 的用户
内存消耗 : 41.44 MB, 击败 6.90% 使用 Java 的用户
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution(object): defmyAtoi(self, s): s = s.strip() ifnot s: return0 sign = 1 i = 0 if s[i] == '+'or s[i] == '-': sign = -1if s[i] == '-'else1 i += 1 result = 0 while i < len(s) and s[i].isdigit(): result = result * 10 + int(s[i]) i += 1 if result * sign >= 2**31 - 1: return2**31 - 1 elif result * sign <= -2**31: return -2**31 return result * sign
结果
执行用时 : 24 ms, 击败 82.57% 使用 Python 的用户
内存消耗 : 13.01 MB, 击败 77.81% 使用 Python 的用户
Python3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution: defmyAtoi(self, s: str) -> int: s = s.strip() ifnot s: return0 sign = 1 i = 0 if s[i] == '+'or s[i] == '-': sign = -1if s[i] == '-'else1 i += 1 result = 0 while i < len(s) and s[i].isdigit(): result = result * 10 + int(s[i]) i += 1 if result * sign >= 2**31 - 1: return2**31 - 1 elif result * sign <= -2**31: return -2**31 return result * sign
classSolution { funcmyAtoi(_s: String) -> Int { let trimmed = s.trimmingCharacters(in: .whitespaces) if trimmed.isEmpty { return0 } var sign =1 var i = trimmed.startIndex if trimmed[i] =="+"|| trimmed[i] =="-" { sign = trimmed[i] =="-"?-1 : 1 i = trimmed.index(after: i) } var result =0 while i < trimmed.endIndex && trimmed[i].isNumber { iflet digit =Int(String(trimmed[i])) { result = result *10+ digit if result * sign >=Int32.max { returnInt(Int32.max) } elseif result * sign <=Int32.min { returnInt(Int32.min) } } i = trimmed.index(after: i) } return result * sign } }
# @param {String} s # @return {Integer} defmy_atoi(s) s = s.strip return0if s.empty? sign = 1 result = 0 max_val = 2**31 - 1 min_val = -(2**31) i = 0 if s[i] == '-' sign = -1 i += 1 elsif s[i] == '+' i += 1 end while i < s.length && s[i].match?(/\d/) digit = s[i].to_i if result > (max_val - digit) / 10 return sign == 1 ? max_val : min_val end result = result * 10 + digit i += 1 end result * sign end
objectSolution{ defmyAtoi(s: String): Int = { val trimmed = s.trim if (trimmed.isEmpty) return0 var sign = 1 var result = 0 val maxVal = Int.MaxValue val minVal = Int.MinValue var i = 0 if (trimmed(i) == '-') { sign = -1 i += 1 } elseif (trimmed(i) == '+') { i += 1 } while (i < trimmed.length && trimmed(i).isDigit) { val digit = trimmed(i).asDigit if (result > (maxVal - digit) / 10) { returnif (sign == 1) maxVal else minVal } result = result * 10 + digit i += 1 } result * sign } }