題目描述:
給定一個字符串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)
歡迎評論,共同進步!!