8. String to Integer (atoi)
来源:互联网 发布:mac版qq怎么远程控制 编辑:程序博客网 时间:2024/05/20 12:51
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.
或许我自己写的有点复杂,但是毕竟是自己写的,先将就了。
public class Solution {
public int myAtoi(String str) {
if(str==null || str.length()==0) return 0;
String s=str.trim();
int len=s.length(),flag=1,i=0,count=0;
long res=0; //为了下边与最大和最小整数做比较,设置为long型
for(i=0;i<len;++i){
if(s.charAt(i)=='+'){
if(count>0) return 0; //count是用来对+和-计数的,如果一旦超过1个就return 0,因为+-123或者-+123都返回0
count++;
}
else if(s.charAt(i)=='-'){ //必须写成这一句而不是下一句
//if(s.charAt(i)=='-'){
if(count>0) return 0;
flag=-1;
count++;
}
else break; //必须要break啊,不然不跳出来,一直循环下去,i就自加的不符合题意了
}
//if(!(s.charAt(i)>='0' && s.charAt(i)<='9') && i<len) return 0;
if(i<len && !(s.charAt(i)>='0' && s.charAt(i)<='9')) return 0;//必须写成这儿而不是上边一句,&&的执行啊
for(int j=i;j<len;++j){
if(s.charAt(j)>='0' && s.charAt(j)<='9'){
res=res*10+(s.charAt(j)-'0');
res=(flag==-1 ? res*(-1) : res);
if(res>Integer.MAX_VALUE) return Integer.MAX_VALUE;
if(res<Integer.MIN_VALUE) return Integer.MIN_VALUE;
res=(flag==-1 ? res*(-1) : res); //负负得正
}
else break; //这个的测试集,是对-123ab45输出为-123,对+-123输出0等
}
res=(flag==-1 ? res*(-1) : res);
return (int)res; //把long型转为int
}
}
看看下边这个程序比上边那个精简了多少
public class Solution {
public int myAtoi(String str) {
if(str==null || str.length()==0) return 0;
String s=str.trim();
int len=s.length(),flag=1,i=0;
double res=0; //double的最大值比long的大
if(s.charAt(i)=='+') ++i; //因为只有一个+或者一个-号的正规,所以简化成这样
else if(s.charAt(i)=='-'){ //必须写成这一句而不是下一句
//if(s.charAt(i)=='-'){
flag=-1;
++i;
}
//if(!(s.charAt(i)>='0' && s.charAt(i)<='9') && i<len) return 0;
if(i<len && !(s.charAt(i)>='0' && s.charAt(i)<='9')) return 0;//必须写成这儿而不是上边一句,&&的执行啊
for(int j=i;j<len;++j){
if(s.charAt(j)>='0' && s.charAt(j)<='9')
res=res*10+(s.charAt(j)-'0');
else break; //这个的测试集,是对-123ab45输出为-123,对+-123输出0等
}
res=(flag==-1 ? res*(-1) : res);
if(res>Integer.MAX_VALUE) return Integer.MAX_VALUE;
if(res<Integer.MIN_VALUE) return Integer.MIN_VALUE;
return (int)res; //把long型转为int
}
}
public class Solution {
public int myAtoi(String str) {
str=str.trim();
//int len=str.length(),i=0;
if(str==null || str.length()==0) return 0;
int len=str.length(),i=0; //如果不写在这儿而是上边是不对的,因为卸载上边的话如果str为null,就会报错
int flag=1;
//long res=0;
double res=0;
if(str.charAt(0)=='+') ++i;
else if(str.charAt(0)=='-'){
flag=-1;
++i;
}
while(i<len && str.charAt(i)>='0' && str.charAt(i)<='9'){
res=res*10+str.charAt(i)-'0';
++i;
}
res=flag!=1? res*(-1) : res;
if(res>Integer.MAX_VALUE) return Integer.MAX_VALUE;
if(res<Integer.MIN_VALUE) return Integer.MIN_VALUE;
return (int)res;
}
}
下边这个是转发的,可以看看http://www.07net01.com/2015/07/863326.html
public class Solution {
public int myAtoi(String str) {
int max = Integer.MAX_VALUE;
int min = -Integer.MIN_VALUE;
long result = 0;
str = str.trim();
int len = str.length();
if (len < 1) return 0;
int start = 0;
boolean neg = false;//标示正负
if (str.charAt(start) == '-' || str.charAt(start) == '+') {
if (str.charAt(start) == '-')
neg = true;
start++;
}
for (int i = start; i < len; i++) {
char ch = str.charAt(i);
if (ch < '0' || ch > '9') break;
result = 10 * result + (ch - '0');
if (!neg && result > max)// 超出边界时,直接返回边界值
return max;
if (neg && -result < min)
return min;
}
if (neg) result = -result;
return (int) result;
}
}
- 8.String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8.String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- 8. String to Integer (atoi)
- JavaScriptCore 简介
- 列表:FontAwesome/iconfont/高斯模糊
- 在64位Win7操作系统中安装Microsoft Access Engine的解决方案
- C Primer Plus10-3
- Hadoop Java API 读写文件系统
- 8. String to Integer (atoi)
- mysql添加多个字段
- maven+spring+ehcache缓存注解 学习总结
- C Primer Plus10-4
- org.hibernate.NonUniqueObjectException: a different object with the same identifier value was ...
- Android SQLite数据库的使用及常用的增删改查方法、无sql语句的方法
- HDU 5584 LCM Walk(number theory && GCD)
- C Primer Plus10-5
- 10029--- I/O 基础之缓冲区