劍指offer之將字串轉換成整數(Java實現)
阿新 • • 發佈:2018-12-26
將字串轉換成整數
題目描述:
將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。
輸入描述:
輸入一個字串,包括數字字母符號,可以為空
輸出描述:
如果是合法的數值表達則返回該數字,否則返回0
示例1
輸入
+2147483647
1a33
輸出
2147483647
0
解題思路:
邊界條件:
資料上下 溢位
空字串
只有正負號
有無正負號
錯誤標誌輸出
public class Solution {
public static boolean flag;
public static int StrToInt(String str) {
flag = false;
//判斷輸入是否合法
if (str == null || str.trim().equals("")) {
flag = true;
return 0;
}
// symbol=0,說明該數為正數;symbol=1,該數為負數;start用來區分第一位是否為符號位
int symbol = 0;
int start = 0;
char[] chars = str.trim().toCharArray();
if (chars[0] == '+') {
start = 1;
}else if (chars[0] == '-') {
start = 1;
symbol = 1;
}
int result = 0;
for (int i = start; i < chars.length; i++) {
if (chars[i] > '9' || chars[i] < '0') {
flag = true;
return 0;
}
int sum= result * 10 + (int) (chars[i] - '0');
if((sum-(int) (chars[i] - '0'))/10!=result){
flag=true;
return 0;
}
result=result * 10 + (int) (chars[i] - '0');
}
// 注意:java中-1的n次方不能用:(-1)^n .'^'異或運算
// 注意,當value=-2147483648時,value=-value
result = (int) Math.pow(-1, symbol) * result;
return result;
}
}
public class Solution {
public int StrToInt(String str) {
if (str.equals("") || str.length() == 0)
return 0;
char[] a = str.toCharArray();
int fuhao = 0;
if (a[0] == '-')
fuhao = 1;
int sum = 0;
for (int i = fuhao; i < a.length; i++) {
if (a[i] == '+')
continue;
if (a[i] < '0' || a[i] > '9') //48代表‘0’,57代表‘9’
return 0;
sum = (sum<<1)+(sum<<3) + (a[i] & 0xf); //sum = sum * 10 + a[i] - 48; sum = (sum<<1)+(sum<<3) + (a[i] & 0xf); sum*10=sum*(2^1+2^3)
}
return fuhao == 0 ? sum : sum * -1;
}
}