[LeetCode]65. 有效數字

題目

驗證給定的字符串是否可以解釋爲十進制數字。

例如:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
" -90e3 " => true
" 1e" => false
"e3" => false
" 6e-1" => true
" 99e2.5 " => false
"53.5e93" => true
" --6 " => false
"-+3" => false
"95a54e53" => false

說明: 我們有意將問題陳述地比較模糊。在實現代碼之前,你應當事先思考所有可能的情況。這裏給出一份可能存在於有效十進制數字中的字符列表:

  • 數字 0-9
  • 指數 - “e”
  • 正/負號 - “+”/"-"
  • 小數點 - “.”

當然,在輸入中,這些字符的上下文也很重要。

解題思路

詳細思路請參考 劍指 Offer 20. 表示數值的字符串

代碼

class Solution {
    public boolean isNumber(String s) {
        // 去除首尾空格
        String str = s.trim();
        int n = str.length();
        if(n == 0){
            return false;
        }
        boolean flag = false;
        // 一、掃描整數部分
        int i = 0;
        int a = 0;
        if(str.charAt(i) == '+' || str.charAt(i) == '-'){
            i++;
        }
        a = i;
        while(a<n && str.charAt(a)>='0' && str.charAt(a)<='9'){
            a++;
        }
        // 判斷整數部分是否存在
        flag = a>i;
        // 二、掃描小數部分
        int j = a;
        int b = a;
        if(j<n && str.charAt(j)=='.'){
            j++;
            b = j;
            while(b<n && str.charAt(b)>='0' && str.charAt(b)<='9'){
                b++;
            }
            // 整數部分或者小數部分至少存在一個
            flag = flag || (b>j);
        }
        // 掃描指數部分
        int k = b;
        int c = b;
        if(k<n && str.charAt(k)=='e'){
            k++;
            while(k<n && (str.charAt(k) == '+' || str.charAt(k) == '-')){
                k++;
            }
            c = k;
            while(c<n && str.charAt(c)>='0' && str.charAt(c)<='9'){
                c++;
            }
            flag = flag && (c>k);
        }
        return flag && (c==n);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章