题解 | #表示数值的字符串#

表示数值的字符串

https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return bool布尔型
     */
    public boolean isNumeric (String str) {
        // write code here
        int size = str.length();
        int index = 0 ;
        // 默认全部是false
        boolean hashNum = false, hasE = false, hasSign = false, hasDot = false;
        // 跳过空格
        while (index < size && str.charAt(index) == ' ') {
            index++;
        }
        while (index < size) {
            while (index < size && str.charAt(index) >= '0' && str.charAt(index) <= '9') {
                index++;
                // 表示前⾯有数字
                hashNum = true;
            }
            // 到末尾直接跳出
            if (index == size) {
                break;
            }
            char c = str.charAt(index);
            if (c == 'e' || c == 'E') {
                // 前⾯有E或者没有数字在前⾯
                if (hasE || !hashNum) {
                    return false;
                }
                hasE = true;
                // 出现E了后⾯⼜可以出现数字了
                hashNum = false;
                hasSign = false;
                hasDot = false;
            } else if (c == '+' || c == '-') {
                if (hasSign || hashNum || hasDot) {
                    return false;
                }
                hasSign = true;
            } else if (c == '.') {
                if (hasDot || hasE) {
                    return false;
                }
                hasDot = true;
            } else if (c == ' ') {
                break;
            } else {
                return false;
            }
            index++;
        }
        // 跳过空格
        while (index < size && str.charAt(index) == ' ') {
            index++;
        }
        return hashNum && index == size;
    }
}

解题思想:

* hashNum : 是否已经有数字

* hashE :是否已经有E

* hasSign :是否已经有符号

* hasDot :是否已经有⼩数点

* 本质是转态的切换,最最重要的⼀点,是 E 出现之后,其实⼩数点和符号,和数字,都是可以再出现的,可以理解为 E 就是⼀个分割线。

#算法##算法笔记#
全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务