美文网首页每日算法 —— 计算机基础回炉系列
LeetCode每日一题 之 判断表示数值的字符串

LeetCode每日一题 之 判断表示数值的字符串

作者: ZSACH | 来源:发表于2020-04-24 13:23 被阅读0次
image

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。题目地址

解题思路

这道题无非就是找到合法数字的规则
比如

  1. 不能出现两个E
  2. 不能出现除数组,运算符号,E之外的其他字符
  3. 不能出现两个小数点
  4. E后面的必须是整数,不能出现小数点
  5. +-符号不能相邻
  6. 符号位只能出现在第一位或者E的后一位

我们只要设计几个标记位,记录是否出现小数点,E等,再配合上面的规则。就可以完成解题

代码

public class Solution {
    //是否出现了 -/+/点/E
    boolean isF,isZ,isD,isE;
    
    //E,-,+ 的位置
    int eIn,fIn,zIn;
    public boolean isNumeric(char[] str) {
        int index=0;
        while(index < str.length){
            char d = str[index];
            //判断是否出现其他数字
            if(!Character.isDigit(d)){
                switch(d){
                    case 'e':
                    case 'E':
                        if(index == str.length-1 || isE){
                            //不能同时出现两个E 并且 不能是最后一位
                            return false;
                        }
                        isE = true;
                        eIn = index;
                        break;
                    case '.':
                        if(isD || isE){
                            //出现了小数点 和 E 都不可以
                            return false;
                        }
                        isD = true;
                        break;
                    case '+':
                        if(index != 0 && !isE){
                            //符号位只能出现在第一位或者E的后一位
                            return false;
                        }
                        if(isF||isZ){
                            //不能同时出现两个+ - 
                            return false;
                        }
                        isZ=true;
                        zIn = index;
                        break;
                    case '-':
                        if(isZ){
                            return false;
                        }
                        if(isF){
                            if(fIn>=eIn){
                                return false;
                            }
                        }
                        
                        isF = true;
                        fIn = index;
                        break;
                    default:
                        return false;
                       
                }
            }
            index++;
        }
       return true;
    }
}

相关文章

网友评论

    本文标题:LeetCode每日一题 之 判断表示数值的字符串

    本文链接:https://www.haomeiwen.com/subject/fcffwhtx.html