LeetCode_8---String to Integer (atoi)
2015-06-02 14:29
295 查看
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Update (2015-02-10):
The signature of the
accepts a
reset your code definition.
Code:
/**
* @author MohnSnow
* @time 2015年6月2日 下午2:34:18
*
*/
public class LeetCode8 {
public static int myAtoi(String str) {
int index = 0;
int sign = 1;
char ch;
int digit;
int total = 0;
//1. Empty string---字符串为空的时候
if (str.length() == 0)
return 0;
//2. Remove Spaces---计算初始空格数量,从开始有符号的位置开始
while (str.charAt(index) == ' ' && index < str.length())
{
index++;
}
//3. Handle signs---处理符号
if (str.charAt(index) == '+' || str.charAt(index) == '-')
{
if (str.charAt(index) == '+')
sign = 1;
else
sign = -1;
index++;
}
//4. Convert number and avoid overflow---转换数字,避免溢出
while (index < str.length())
{
ch = str.charAt(index);
if (ch < '0' || ch > '9')
break;
digit = ch - '0';
//check if total will be overflow after 10 times and add digit---对下面的判断进行溢出判断
if (Integer.MAX_VALUE / 10 < total || Integer.MAX_VALUE / 10 == total && Integer.MAX_VALUE % 10 < digit)
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
total = 10 * total + digit;
index++;
}
return total * sign;
}
public static void main(String[] args) {
String c = " 2a147 483646";
System.out.println(myAtoi(c));
}
}
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Update (2015-02-10):
The signature of the
C++function had been updated. If you still see your function signature
accepts a
const char *argument, please click the reload button to
reset your code definition.
Code:
/**
* @author MohnSnow
* @time 2015年6月2日 下午2:34:18
*
*/
public class LeetCode8 {
public static int myAtoi(String str) {
int index = 0;
int sign = 1;
char ch;
int digit;
int total = 0;
//1. Empty string---字符串为空的时候
if (str.length() == 0)
return 0;
//2. Remove Spaces---计算初始空格数量,从开始有符号的位置开始
while (str.charAt(index) == ' ' && index < str.length())
{
index++;
}
//3. Handle signs---处理符号
if (str.charAt(index) == '+' || str.charAt(index) == '-')
{
if (str.charAt(index) == '+')
sign = 1;
else
sign = -1;
index++;
}
//4. Convert number and avoid overflow---转换数字,避免溢出
while (index < str.length())
{
ch = str.charAt(index);
if (ch < '0' || ch > '9')
break;
digit = ch - '0';
//check if total will be overflow after 10 times and add digit---对下面的判断进行溢出判断
if (Integer.MAX_VALUE / 10 < total || Integer.MAX_VALUE / 10 == total && Integer.MAX_VALUE % 10 < digit)
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
total = 10 * total + digit;
index++;
}
return total * sign;
}
public static void main(String[] args) {
String c = " 2a147 483646";
System.out.println(myAtoi(c));
}
}
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#数据结构与算法揭秘二
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#常见算法面试题小结
- JavaScript 组件之旅(二)编码实现和算法
- JavaScript数据结构和算法之图和图算法