LeetCode——Valid Number

Valid Number


Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

Java代码:

public class Solution {
    public boolean isNumber(String s) {
          boolean flag_Dot = false;  
        boolean flag_e = false;  
        boolean flag_num = false;  
        boolean flag_num_2 =false;
        boolean flag_1 = false; 
        int num_begin =0;
        int num_end =0;
        int space_index =0;
        int space_index_start =0;
        int e_index =0;
        int dot_index =0;
        int i =0;
        
        int len = s.length();  
        
        if(s.charAt(0) =='-' ||s.charAt(0) =='+'){i=1;num_begin =1;num_end =1;}  
        for(;i<len;i++)  
        {  
            if(s.charAt(i)<'0' || s.charAt(i)>'9')  
            {  
                if(s.charAt(i) == ' ') {if(i>num_begin && flag_num_2 ==true)space_index =i;
                	if(flag_Dot==true )space_index=i;
                	if(space_index!=0 &&space_index_start==0)space_index_start=space_index;
                	if(flag_num_2==false && (s.charAt(0) =='-' ||s.charAt(0) =='+'))return false;
                	continue; }
                if(s.charAt(i) =='.' ||s.charAt(i) =='e' ||s.charAt(i) == 'E')  
                {  
                    if(len ==1 ) return false;  
                    if(i ==0 &&(s.charAt(i) =='e' ||s.charAt(i) == 'E')) return false;  
                    if(s.charAt(i) == '.')  
                        if(flag_Dot == false)  
                        {
                        	if(space_index<i && space_index!=0)return false;
                        	dot_index =i;
                            flag_Dot = true;  
                        }
                        else  
                            return false;  
                    else{  
                        if(flag_e == false)  
                        {  
                        	e_index=i;
                            for(int j =0;j<i;j++)  
                            {  
                                if(s.charAt(j)>='0' &&s.charAt(j)<='9')  
                                flag_1 = true;  
                            }  
                            for(int j= i;j<len;j++){
                            	if(s.charAt(j) == '.')return false;
                            }
                            if(flag_1 ==false) return false; 
                            if(len == i+1) return false;
                            flag_e = true;  
                        }  
                        else  
                            return false;  
                        }  
                }else  
                    return false;  
            }  
            else{ 
            	if(flag_num_2 ==false){num_begin =i;flag_num_2 = true;}
            	if(i>num_end)num_end =i;
                flag_num = true;  
                
            }  
        } 
        if(space_index_start<num_end &&space_index !=0 &&num_begin!=num_end)return false; 
        if(flag_Dot==true)
        {
        	if(space_index>dot_index && space_index<num_end)return false;
        	if(space_index>dot_index && space_index_start<num_end &&space_index_start!=0)return false;
        }
        if(e_index > num_end)return false;
        if(flag_num == false) return false;  
        return true;  
    }
}

上面是考虑穷举不成立的条件,穷举了一个上午,还是没有pass。。。

代码的逻辑都已经凌乱了,已经没有毅力坚持了。。

现在意识到方法肯定不对,网上搜了,发现是用正则来做的。。

Java代码:

public class Solution {
    public boolean isNumber(String s) {
         if(s.trim().isEmpty()){  
            return false;  
        }  
        String regex = "[-+]?(\\d+\\.?|\\.\\d+)\\d*(e[-+]?\\d+)?";  
        if(s.trim().matches(regex)){  
            return true;  
        }else{  
            return false;  
        } 
    }
}

我错误地估计了leetcode测试集合的规模。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值