将整数字符串转成整数值
题目描述:
给定一个字符串str,如果str符合日常书写的整数形式,并且属于32位整数的范围,返回str所代表的整数值,否则返回0。
举例:
str=“123”,返回123
str=“023”,因为“023”不符合日常的书写习惯,所以返回0
str=“A13”,返回0
str=“0”,返回0
str=“2147483647”,返回2147483647
str=“2147483648”,因为溢出了,所以返回0
str=“-123”,返回123
思路:
首先检查str是否符合日常书写的整数形式
1 public boolean isValid(char[] chas) { 2 if (chas[0]!='-'&&((chas[0]<'0'||chas[0]>'9'))) { 3 return false; 4 } 5 if (chas[0]=='-'&&(chas.length==1||chas[1]=='0')) { 6 return false; 7 } 8 if (chas[0]==0&&chas.length>1) { 9 return false; 10 } 11 for (int i=0; i<chas.length; i++) { 12 if (chas[i]<'0'||chas[i]>'9') { 13 return false; 14 } 15 } 16 return true; 17 }
valid adj. 有效的;有根据的;合法的;正当的(写代码顺便记记单词,英语太差!!)
convert方法:
public class Solution { public boolean isValid(char[] chas) { if (chas[0]!='-'&&((chas[0]<'0'||chas[0]>'9'))) { return false; } if (chas[0]=='-'&&(chas.length==1||chas[1]=='0')) { return false; } if (chas[0]=='0'&&chas.length>1) { return false; } for (int i=1; i<chas.length; i++) { if (chas[i]<'0'||chas[i]>'9') { return false; } } return true; } public int convert(String str) { if (str==null||str.equals("")) { return 0; } char[] chas=str.toCharArray(); if (!isValid(chas)) { return 0; } boolean posi=chas[0]=='-'?false:true; int minq=Integer.MIN_VALUE/10; int minr=Integer.MIN_VALUE%10; int res=0; int cur=0; for (int i=posi?0:1; i<chas.length; i++) { cur='0'-chas[i]; if ((res<minq)||(res==minq&&cur<minr)) { return 0; } res=res*10+cur; } if (posi&&res==Integer.MIN_VALUE) { return 0; } return posi?-res:res; } }
测试了好多用例,应该没错!!
下一个博客是LeetCode8 字符串转换整数(atoi)
欢迎评论,共同进步!!