不断分类求解
表示数值的字符串
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; } } }