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.

public class Solution {
    public int index;
	public boolean isNumber(String s) {
		// Start typing your Java solution below
		// DO NOT write main() function
		index = 0;
		if(s.length() == 0)
			return false;
		// 去掉空格
		while(index < s.length() && s.charAt(index) == ' ')
			index++;
		
		// e 之前是否为数字
		if(!isNum(s, false))
			return false;
		// e 之后是否为数字
		if(index < s.length() && s.charAt(index) == 'e'){
			index++;
			if(!isNum(s, true))
				return false;
		}
		
		while(index < s.length() && s.charAt(index) == ' ')
			index++;
		if(index == s.length())
			return true;
		else
			return false;
	}
	public boolean isNum(String s, boolean flag){
		boolean res = false;
		if(index < s.length() && (s.charAt(index) == '-' || s.charAt(index) == '+'))
			index++;
		boolean dot = false;
		while(index < s.length()){
			if(s.charAt(index) <= '9' && s.charAt(index) >= '0'){
				res = true;
				index++;
			}
			else if(s.charAt(index) == '.'){
				if(flag) // e 后面数字不带点
					return false;
				if(dot) // 多于一个点
					return false;
				dot = true;
				index++;
			}
			else if(s.charAt(index) == 'e' || s.charAt(index) == ' ')
				return res;
			else
				return false;
		}
		return res;
	}
}

One exceptional solution!

public class Solution {
	public boolean isNumber(String s) {
		if (s == null || s.length() == 0)
			return false;
		int index = 0;
		index = skipWhiteSpaces(s, index);
		index = skipSigns(s, index);
		int n1 = skipDigits(s, index);
		index += n1;
		if (index < s.length() && s.charAt(index) == '.')
			index++;
		int n2 = skipDigits(s, index);
		index += n2;
		if (n1 == 0 && n2 == 0)
			return false;
		if (index < s.length()
				&& (s.charAt(index) == 'e' || s.charAt(index) == 'E')) {
			index++;
			index = skipSigns(s, index);
			int n3 = skipDigits(s, index);
			if (n3 == 0)
				return false;
			index += n3;
		}
		index = skipWhiteSpaces(s, index);
		return index == s.length();
	}
	public int skipWhiteSpaces(String s, int index){
		while(index < s.length() && s.charAt(index) == ' ')
			index++;
		return index;
	}
	public int skipSigns(String s, int index){
		if(index < s.length() && (s.charAt(index) == '+' || s.charAt(index) == '-'))
			return index + 1;
		return index;
	}
	public int skipDigits(String s, int index){
		int counter = index;
		while(counter < s.length() && s.charAt(counter) >= '0' && s.charAt(counter) <= '9')
			counter++;
		return counter - index;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值