题目链接:点击打开链接
题目大意:略。
解题思路:略。
相关企业
- 微软(Microsoft)
- 亚马逊(Amazon)
- 谷歌(Google)
- 彭博(Bloomberg)
- 字节跳动
- 百度
AC 代码
- Java
// 解决方案(1) class Solution { public int strToInt(String str) { str = str.trim(); boolean fisrtNumFlag = false; int sign = 1; char[] chars = str.toCharArray(); char c; long res = 0; int num = -1; for (int i = 0; i < chars.length; i++) { c = chars[i]; // 字母 if (isAlphabet(c)) { if (!fisrtNumFlag) { return 0; } break; } // 符号 if (isSign(c)) { if (i > 0 && !fisrtNumFlag) { return 0; } if (i == 0) { sign = c == '+' ? 1 : -1; continue; } } // 其他 if ((num = handleNumber(c)) == -1) { break; } // 数字 fisrtNumFlag = true; res = res * 10 + num; if (sign > 0 && res > Integer.MAX_VALUE) { return Integer.MAX_VALUE; } if (sign < 0 && -res < Integer.MIN_VALUE) { return Integer.MIN_VALUE; } } return (int)(sign * res); } private int handleNumber(char c) { if (c >= '0' && c <= '9') { return c - '0'; } return -1; } private boolean isAlphabet(char c) { return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'; } private boolean isSign(char c) { return c == '+' || c == '-'; } } // 解决方案(2) class Solution { public int strToInt(String str) { char[] c = str.trim().toCharArray(); if(c.length == 0) return 0; int res = 0, bndry = Integer.MAX_VALUE / 10; int i = 1, sign = 1; if(c[0] == '-') sign = -1; else if(c[0] != '+') i = 0; for(int j = i; j < c.length; j++) { if(c[j] < '0' || c[j] > '9') break; if(res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; res = res * 10 + (c[j] - '0'); } return sign * res; } } // 解决方案(3) class Solution { public int strToInt(String str) { int res = 0, bndry = Integer.MAX_VALUE / 10; int i = 0, sign = 1, length = str.length(); if(length == 0) return 0; while(str.charAt(i) == ' ') if(++i == length) return 0; if(str.charAt(i) == '-') sign = -1; if(str.charAt(i) == '-' || str.charAt(i) == '+') i++; for(int j = i; j < length; j++) { if(str.charAt(j) < '0' || str.charAt(j) > '9') break; if(res > bndry || res == bndry && str.charAt(j) > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; res = res * 10 + (str.charAt(j) - '0'); } return sign * res; } }
- C++
class Solution { public: int strToInt(string str) { int res = 0, bndry = INT_MAX / 10; int i = 0, sign = 1, length = str.size(); if(length == 0) return 0; while(str[i] == ' ') if(++i == length) return 0; if(str[i] == '-') sign = -1; if(str[i] == '-' || str[i] == '+') i++; for(int j = i; j < length; j++) { if(str[j] < '0' || str[j] > '9') break; if(res > bndry || res == bndry && str[j] > '7') return sign == 1 ? INT_MAX : INT_MIN; res = res * 10 + (str[j] - '0'); } return sign * res; } };