題目:

Implement atoi to convert a string to an integer.

 

思路:

這個題目比較類似於UVA類型的問題.

題目明確,但是其隱含各種例外狀況必須進行處理.

由於特殊測資中含有"-15a4674"此種類型的輸入,因此從需特別注意迴圈的跑法.

若從字串的尾端回算則需要在出現特殊狀況時將數值歸零.因此這邊直接從前面開始跑.

這邊注意的是從前面開始計算與往常的後面開始計算的乘法會有些落差:

 

前面開始跑:
unit = 10;
loop{
    sum = (temp-48) + (sum*unit);
}

從後面開始跑:
unit = 1;
loop{
    sum += (temp-48) * unit;
    unit *= 10;
}

 

中間最麻煩的莫過於溢位問題,最容易的方式依然適用long先作暫時存,在判斷是否溢位後進行輸出.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Solution {
    public int myAtoi(String str) {
        int Init = 0 , valid_size = 10 , isPositive = -1,unit = 10 , num_count = 0;
        long sum = 0;
        
        for(int i=0;i<str.length();i++){
            char temp = str.charAt(i);
            
            if((temp-48) <= 9 && (temp-48) >= 0) {
                sum = (temp-48) + (sum*unit);    
                Init = 1;
                num_count++;
            }else if((temp - '+') ==0){
                if(isPositive != -1)    return 0;
                isPositive = 1;
                Init = 1;
            }else if((temp - '-') == 0){
                if(isPositive != -1)    return 0;
                isPositive = 0; // false
                Init = 1;
            }else if(Init == 1){
                break;
            }else if((temp - ' ') == 0){
                valid_size++;
            }else{
                break;
            }
            
        }
        
        if(isPositive == 0)
            sum *= -1;

        
        if(num_count >11 && isPositive == 0)
            return -2147483648;
        else if(num_count >11)
            return 2147483647;
        else if(sum > 2147483647)
            return 2147483647;
        else if(sum < -2147483648 )
            return -2147483648;
        else
            return (int)sum;
    }
}
arrow
arrow
    文章標籤
    leetcode Medium
    全站熱搜

    Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣()