题目链接:点击打开链接
题目大意:略。
解题思路:略。
相关企业
- 微软(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;
}
};