剑指offer-表示数值的字符串 -- Java实现

题目

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

分析

思路一:

代码:

public class Solution {
    public boolean isNumeric(char[] str) {
        boolean sign = false, decimal = false, hasE = false;
        for(int i = 0; i < str.length; i++) {
            if(str[i] == '+' || str[i] == '-') {
                //1.判断sign的合法性
                //第二次出现符号,必须在e/E后面,否则返回false
                if(sign && i - 1 >= 0 && str[i - 1] != 'e' && str[i - 1] != 'E') return false;
                //第一次出现符号,如果不是开头,且不在e后面,返回false
                if(!sign && i > 0 && str[i - 1] != 'e' && str[i - 1] != 'E') return false;
                sign = true;//合法
            } else if(str[i] == 'e' || str[i] == 'E') {
                //2.判断字符e的合法性
                //e后面一定要接数字或者符号
                if(i == str.length - 1) return false;
                if(hasE) return false;
                hasE = true;
            } else if(str[i] == '.') {
                //3.判断小数点的合法性
                //如果小数点在e后面或者已经出现过一次或者小数点在首位,返回false
                if(hasE || decimal || i == 0) return false;
                decimal = true;
            } else if(str[i] < '0' || str[i] > '9') {
                //4.不合法字符直接返回false;
                return false;
            }
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42054926/article/details/106155466