1. 程式人生 > >劍指offer之將字串轉換成整數(Java實現)

劍指offer之將字串轉換成整數(Java實現)

將字串轉換成整數

NowCoder

題目描述:

將一個字串轉換成一個整數(實現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;    
    }
}