๐ŸŒ• 65. ๆœ‰ๆ•ˆๆ•ฐๅญ—

ๅžไฝ›็ซฅๅญ2022ๅนด10ๆœˆ10ๆ—ฅ
  • algorithm
  • extra
  • Number
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ• 65. ๆœ‰ๆ•ˆๆ•ฐๅญ—

้šพๅบฆ: ๐ŸŒ•

้—ฎ้ข˜ๆ่ฟฐ

img_6.png


่งฃๆณ•

class Solution {
    public boolean isNumber(String s) {
        // ๆ€่ทฏ๏ผš
        // ๆ นๆฎ่ฆๆฑ‚๏ผŒๅ†™ๅˆคๆ–ญๆกไปถ
        int len = s.length();
        int index = 0;
        int flag = 0; // ๅˆคๆ–ญๆ˜ฏๅฆๆœ‰ ้ฆ– +/-
        // ๆ‰พๅˆฐ e๏ผŒ่ฟ›่กŒๆ‹†ๅˆ†
        for(int i = index; i < len; i ++) {
            if(s.charAt(i) == 'e' || s.charAt(i) == 'E') {
                if(i > 0 && i + 1 <= len - 1 && isPosInt(s, i + 1, len - 1)) {
                    s = s.substring(0, i);
                    break;
                } else {
                    return false;
                }
            }
        }
        len = s.length();
        if(len == 1 && !isDigit(s.charAt(0))) {
            return false;
        }
        if(s.charAt(0) == '+' || s.charAt(0) == '-') {
            flag = 1;
            index ++;
        }        
        
        while(index < len) {
            if(isDigit(s.charAt(index))) {
                index ++;
            } else if(s.charAt(index) == '.') {
                if(index + 1 <= len - 1 && isInt(s, index + 1, len - 1)) {
                    return true;
                } else if(index + 1 > len - 1) {
                    // . ๅŽ้ขๆฒกๆœ‰ๆ•ฐๅญ—
                    if(index > 1 || (index == 1 && flag == 0)) {
                        return true;
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
        return true;
    }

    private boolean isInt(String s, int left, int right) {
        if(left > right) {
            return false;
        }
        for(int i = left; i <= right; i ++) {
            if(!isDigit(s.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    private boolean isPosInt(String s, int left, int right) {
        if(s.charAt(left) == '+' || s.charAt(left) == '-') {
            return isInt(s, left + 1, right);
        } else {
            return isInt(s, left, right);
        }
    }

    private boolean isDigit(char c) {
        if(c >= '0' && c <= '9') {
            return true;
        } else {
            return false;
        }
    }
}

่พ“ๅ‡บ

img_5.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/10/10 ไธ‹ๅˆ8:43:48
่ดก็Œฎ่€…: liuxianzhishou