首页 > 其他 > 详细

Leetcode 详解(Valid Number)

时间:2016-04-23 08:57:44      阅读:148      评论:0      收藏:0      [点我收藏+]

Validate if a given string is numeric.

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

解决方案:

public class Solution {
    public boolean isNumber(String s) {
        int i=0,n=s.length();
        while(i<n&&Character.isWhitespace(s.charAt(i)))i++;
        if(i<n&&(s.charAt(i)==‘+‘||s.charAt(i)==‘-‘))i++;
        boolean isNumber=false;
        while(i<n&&Character.isDigit(s.charAt(i)))
        {
            i++;
            isNumber=true;                               //有数字就把 isNumber=true
        }
        if(i<n&&s.charAt(i)==‘.‘)
        {
            i++;
            while(i<n&&Character.isDigit(s.charAt(i)))   //即出现‘.‘, 则后面要么就没有了(i==n ,那么下面所有的判断都不满足了,),要么就是后面有数字,则isNumber=true )
            {
                i++;
                isNumber=true;
            }
        }
        if(isNumber&&i<n&&s.charAt(i)==‘e‘)              //前面没有数字,或者没有 ‘.‘ + 数字  这种形式(isNumber决定),那么当前即便为e,也不需要去处理
        {
            isNumber=false;
            i++;
            if(i<n&&(s.charAt(i)==‘+‘||s.charAt(i)==‘-‘))i++;
            while(i<n&&Character.isDigit(s.charAt(i)))
            {
                i++;
                isNumber=true;
            }
        }
        while(i<n&&Character.isWhitespace(s.charAt(i)))i++;
        return isNumber&&i==n;
    }
}

注:e9 -> false ;  1. -> true ;  .1 -> true ;   49.e+9 -> true ;  .e9 -> false; .0e4 -> true 。

大致思路是从左到右,依次处理左边数字前的空格、+-号、‘.’、e(以及e后面的+-号)、数字、右边数字后的空格。‘.’ 以及e只会出现依次,所以用一次 if 即可,然后再判断它后面有没有数字有就

isNumber=true,再判断数字后面是不是还有空格。
特别说明: if(isNumber&&i<n&&s.charAt(i)==‘e‘) 这句语句用的比较好,排除了 e 前面的多种情况,否则对于出现 e 这种情况来说,会有很多情况

 

Leetcode 详解(Valid Number)

原文:http://www.cnblogs.com/zehua-shu/p/5423792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!