leetcode_Valid Number

来源:互联网 发布:海关数据怎么查 编辑:程序博客网 时间:2024/05/19 18:16

描述:

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.

Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

思路:

这道题目还是挺复杂的,复杂的原因是题目并没有给出有效数字的定义,比如说   .1  ,2.1e10.2 ,2e3.2 和2.1e5 有效,但10.1.1非法而这些数字的判断又是很麻烦的  

代码:

public boolean isNumber(String s) {s = s.trim();if (s.startsWith("+"))s = s.substring(1);else if (s.startsWith("-"))s = s.substring(1);boolean isInterger = false;boolean isFloater = false;boolean isSciencer = false;if (isInt(s))isInterger = true;int indexFloat = -1;int indexScience1 = -1;int indexScience2 = -1;indexFloat = s.indexOf('.');indexScience1 = s.indexOf('e');indexScience2 = s.indexOf('E');String nums[] = null;if (indexFloat != -1) {int index1=s.indexOf('.');int index2=s.lastIndexOf('.');if(index1!=index2)isFloater=false;else isFloater = isFloat(s);}if (indexScience1 + indexScience2 != -2) {if (indexScience1 != -1){int index1=s.indexOf('e');int index2=s.lastIndexOf('e');if(index1!=index2)isSciencer=false;else{nums = s.split("e");isSciencer = isScientific(nums);}}if (indexScience2 != -1){int index1=s.indexOf('E');int index2=s.lastIndexOf('E');if(index1!=index2)isSciencer=false;else{nums = s.split("E");isSciencer = isScientific(nums);}}}if (isFloater || isInterger || isSciencer)return true;return false;}public boolean isScientific(String num[]) // 是否为有效的科学计数{if(num.length<2)return false;if (num[1].startsWith("+") || num[1].startsWith("-"))num[1] = num[1].substring(1);boolean flag1 = num[0].contains(".");if (flag1)flag1 = isFloat(num[0]);elseflag1 = isInt(num[0]);boolean flag2 = isInt(num[1]);if (flag1 && flag2)return true;return false;}public boolean isFloatic(String str[]) //是否为有效的浮点数{if (isInt(str[0]) && isInt(str[1]))return true;return false;}public boolean isFloat(String s) //是否为浮点数{boolean isTrue = false;String nums[] = null;if (s.startsWith("."))isTrue = isInt(s.substring(1));else if(s.endsWith("."))isTrue = isInt(s.substring(0,s.length()-1));else {nums = s.split("\\.");if (nums.length != 2)return false;isTrue = isInt(nums[0]) && isInt(nums[1]);}return isTrue;}public boolean isInt(String str) //是否为整数{if (str == null || str.length() == 0)return false;boolean isLeg = true;char ch;for (int i = 0; i < str.length(); i++) {ch = str.charAt(i);if (ch > '9' || ch < '0') {isLeg = false;break;}}return isLeg;}


0 0
原创粉丝点击