將一個字符串轉換成一個整數


題目描述

將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值為0或者字符串不是一個合法的數值則返回0。
輸入描述:
輸入一個字符串,包括數字字母符號,可以為空
返回值描述:
如果是合法的數值表達則返回該數字,否則返回0

示例1:

輸入:"+2147483647"
輸出:2147483647

示例2:

輸入:"1a33"
輸出:0

題目鏈接

https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

解題思路

該題目主要有三個方面要注意:

一是判斷第一個字符是否為符號“+” 或 “-”;

二是判斷字符串中間是否有非法字符,即非數字(字母);

三是判斷是否為空字符串;

 

所以,上來應該先判斷是否為空,以及字符串長度是否小於1;

然后將字符串轉為字符數組,遍歷字符數組,判斷是否有非法字符,即判斷是否合法;

如果不合法則返回0;如果合法則繼續判斷首字符是否是符號,如果是正號(“+”)則將標志位flag置為1,如果是負號(“-”)將標志位置為-1;

然后遍歷數組, res = 10*res+chs[i]-'0'; 這里注意,從數組里獲得的是字符,並不是數字,所以要減去 '0' ,這樣得到的才是真正的數字(0-9)。

最后返回標志位flag*res乘積。

----

以上的思路是一個傳統的思路,其實,還可以進行優化。

比如,可以把判斷是否合法放在計算res結果的這個循環里面,這樣就將兩次遍歷數組減少為只需遍歷一次就行。

還可以標志位判斷也放在循環里。

代碼如下:

public class Solution {
    public int StrToInt(String str) {
        if(str.isEmpty()||str.length()<1)//特別注意這里的判斷 return 0;
        char[] chs = str.toCharArray();
//         if(!isLegal(chs)){
//             return 0;
//         }
        int res = 0;
        /*
        int flag = 1;
        if(chs[0]=='-')
            flag = -1;
        else if(chs[0]=='+')
            flag = 1;
        else 
            res = chs[0]-'0';
            */
        for(int i = 0;i<chs.length; i++){
            if(chs[i]=='-' || chs[i]=='+')
                continue;
            if(chs[i]<'0' || chs[i]>'9')
                return 0;
            res = 10*res+chs[i]-'0';
        }
        return chs[0]=='-'?-res:res;
        
    }
    
  //該函數在這里沒有用到,只是為了對比第一種思路;
public boolean isLegal(char[] chs){ for(int i = 0; i<chs.length; i++){ if(!(chs[i]>='a' && chs[i]<='z' || chs[i]>='A' && chs[i]<='Z')){ return false; } } return true; } }

 

 

 

Over...

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM