劍指Offer Java版 面試題20:表示數(shù)值的字符串

題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)用來(lái)判斷字符串是否表示數(shù)值(包括整數(shù)和小數(shù))。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數(shù)值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

練習(xí)地址

https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2
https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/

參考答案

class Solution {
    private int i;

    public boolean isNumber(String s) {
        if (s == null) {
            return false;
        }
        char[] str = s.trim().toCharArray();
        i = 0;
        boolean numeric = scanInteger(str);

        // 如果出現(xiàn)'.',則接下來(lái)是數(shù)字的小數(shù)部分
        if (i < str.length && str[i] == '.') {
            i++;
            // 下面一行代碼用||的原因:
            // 1. 小數(shù)可以沒(méi)有整數(shù)部分,如 .123 等于 0.123;
            // 2. 小數(shù)點(diǎn)后面可以沒(méi)有數(shù)字,如 233. 等于 233.0;
            // 3. 當(dāng)然,小數(shù)點(diǎn)前面和后面可以都有數(shù)字,如 233.666
            numeric = scanUnsignedInteger(str) || numeric;
        }
        // 如果出現(xiàn) 'e' 或者 'E',則接下來(lái)是數(shù)字的指數(shù)部分
        if (i < str.length && (str[i] == 'e' || str[i] == 'E')) {
            i++;
            // 下面一行代碼用&&的原因:
            // 1. 當(dāng) e 或 E 前面沒(méi)有數(shù)字時(shí),整個(gè)字符串不能表示數(shù)字,如 .e1、e1;
            // 2. 當(dāng) e 或 E 后面沒(méi)有整數(shù)時(shí),整個(gè)字符串不能表示數(shù)字,如 12e、12e+5.4
            numeric = numeric && scanInteger(str);
        }
        return numeric && i == str.length;
    }

    private boolean scanUnsignedInteger(char[] str) {
        int before = i;
        while (i < str.length && str[i] >= '0' && str[i] <= '9') {
            i++;
        }
        // 當(dāng) str 中存在若干 0~9 的數(shù)字時(shí),返回 true
        return i > before;
    }

    private boolean scanInteger(char[] str) {
        if (i == str.length) {
            return false;
        }
        if (str[i] == '+' || str[i] == '-') {
            i++;
        }
        return scanUnsignedInteger(str);
    }
}

復(fù)雜度分析

  • 時(shí)間復(fù)雜度:O(n)。
  • 空間復(fù)雜度:O(1)。

??劍指Offer Java版目錄
??劍指Offer Java版專(zhuān)題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容