LeetCode(算法)- 8. 字符串转换整数 (atoi)
Posted 程序员牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(算法)- 8. 字符串转换整数 (atoi)相关的知识,希望对你有一定的参考价值。
题目链接:点击打开链接
题目大意:略。
解题思路:略。
相关企业
- 微软(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;
;
以上是关于LeetCode(算法)- 8. 字符串转换整数 (atoi)的主要内容,如果未能解决你的问题,请参考以下文章
8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)
8. 字符串转换整数 (atoi)(leetcode力扣算法 - java / rust)
LeetCode(算法)- 8. 字符串转换整数 (atoi)