字符串中數字子串的求和


題目:給定一個字符串str,求其中全部數值串所代表的數值之和。

要求:

1.忽略小數點字符,例如:”A1.3”,將其看成1和3兩個數字

2.如果津貼數字子串的左側出字符“-”,當連續出現數量為奇數的時候,則試后面數字為負,連續數值為偶數時,則視為正…

eg:“A-1BC--12”結果為->11

思路:要求時間復雜度O(N),空間O(1)
1.不管遇到什么先-'0' =>cur
2.若cur不是數字->即不在0~9之間...需要先判斷posi是不是false...
因為沒第一次遇到'-'則會把posi設置為false,第二次先去看看之前posi,
如果是'-',那么就約掉這個'-',把posi設置為true...
3.如果是'0'~'9',則開始計算num,每次增加10的倍數...然后各位加起來,此時還要好主意cur前邊到底是正是負…
public int numSum(String str) {
        if (str == null) return 0;
        char[] chars = str.toCharArray();
        int res = 0;
        int num = 0;
        boolean posi = true;
        for (int i = 0; i < chars.length; i++) {
            int cur = chars[i] - '0';
            if (cur < 0 || cur > 9) {
                //之所以把num放到非num的判斷里面是因為,到此為止這個num的
                //統計已經技術,例如123A-> num= (((1)*10)+2)*10 +3 = 123,
                //當計算到A的時候num正好統計出來...故可以計算res+=num...
                res += num;
                num = 0;
                if (chars[i] == '-') {
                    //當出現'-' 的時候就需要去判斷這個'-' 到底是第一個'-' 還是第二個
                    //原則是第一次出現'-' 就令posi為false...出現兩次就設為true...
                    if (i - 1 > -1 && chars[i - 1] == '-') {
                        //判斷的時候,防止是'-' 開頭的,則需要用i-1>-1判斷...
                        posi = true;
                    } else {
                        posi = false;
                    }
                } else {
                    posi = true;
                }
            } else {
                num = num * 10 + (posi ? cur : -cur);
            }
        }
        res += num;
        return res;
    }


免責聲明!

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



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