不断分类求解

表示数值的字符串

http://www.nowcoder.com/questionTerminal/6f8c901d091949a5837e24bb82a731f2

代码思路是按照每一种情况进行的分类讨论,进行分类讨论的时候对于跟题目有很多地方存在分歧,所以导致通过率不高,只能按照提交每一次出错的结果来进行补充,最后形成答案。
flag2的目的是确定+-符号是否应该出现,如果当已经存在数字在前面的时候直接让flag2= false,说明此时不能再有+-符号。如果出现了e的话会使得+-号又可以重新出现,但是如果e的下一个是数字的话依旧让flag2 = false,不再允许出现+-。其他情况都类似。

public class Solution {
    public boolean flag1 = true;
    public boolean flag2 = true;
    public boolean isNumeric(char[] str) {
        if(str.length == 0){
            return false;
        }
        return isNum(str,0);
    }
    public boolean isNum(char[] str,int i){
        if(i == str.length){
            return true;
        }
        if(str[i]>='0'&& str[i]<='9'){
            flag2 = false;
            return isNum(str,i=i+1);
        }else if((str[i] =='+'|| str[i] == '-')&& i<str.length-1 &&flag2){
            return (str[i+1]>='0'&& str[i+1]<='9'||str[i+1] == '.')&&isNum(str,i+1);
        }else if((str[i] == 'e'|| str[i] == 'E')&& i<str.length-1){
            flag2 = true;
            flag1 = false;
            return (str[i+1]>='0'&& str[i+1]<='9'||(str[i+1]=='-'||str[i+1] =='+'))&&isNum(str,i+2);
        }else if(str[i] == '.' && i<str.length-1 && flag1){
            flag1 = false;
            return (str[i+1]>='0'&& str[i+1]<='9')&&isNum(str,i+2);
        }else{
            return false;
        }
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务