LeetCode 66 Valid Number
2014-06-25 18:34
274 查看
Validate if a given string is numeric.
Some examples:
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
思路1:使用有限状态机,空间复杂度为O(n),时间复杂度为O(n),本思路来自龚陆安(http://weibo.com/luangong),只不过原作者使用的是c++,我将其改写为java。
思路2 java中可以使用正则表达式,我们可以使用正则表达式来处理。
思路3:与思路2相同,只不过对正则表达式进行了精简。
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.
思路1:使用有限状态机,空间复杂度为O(n),时间复杂度为O(n),本思路来自龚陆安(http://weibo.com/luangong),只不过原作者使用的是c++,我将其改写为java。
public class Solution { public boolean isNumber(String s) { int transitionTable[][] = new int[][] { { -1, 0, 3, 1, 2, -1 }, // next states for state 0 { -1, 8, -1, 1, 4, 5 }, // next states for state 1 { -1, -1, -1, 4, -1, -1 }, // next states for state 2 { -1, -1, -1, 1, 2, -1 }, // next states for state 3 { -1, 8, -1, 4, -1, 5 }, // next states for state 4 { -1, -1, 6, 7, -1, -1 }, // next states for state 5 { -1, -1, -1, 7, -1, -1 }, // next states for state 6 { -1, 8, -1, 7, -1, -1 }, // next states for state 7 { -1, 8, -1, -1, -1, -1 } // next states for state 8 }; int state = 0; for (int i = 0; i < s.length(); ++i) { int inputType = 0; if (Character.isSpaceChar(s.charAt(i))) inputType = 1; else if (s.charAt(i) == '+' || s.charAt(i) == '-') inputType = 2; else if (Character.isDigit(s.charAt(i))) inputType = 3; else if (s.charAt(i) == '.') inputType = 4; else if (s.charAt(i) == 'e' || s.charAt(i) == 'E') inputType = 5; // Get next state from current state and input symbol state = transitionTable[state][inputType]; // Invalid input if (state == -1) return false; } // If the current state belongs to one of the accepting (final) states, // then the number is valid return state == 1 || state == 4 || state == 7 || state == 8; } }
思路2 java中可以使用正则表达式,我们可以使用正则表达式来处理。
public class Solution { public boolean isNumber(String s) { //首先删除字符串首位和尾部的空格 String str=s.replaceAll("(^\\s+)|(\\s+$)", ""); if(str.length()==0) return false; boolean [] temp=new boolean[6]; boolean result=false; temp[0]=str.matches("(-|\\+)?\\d+(\\.)?"); temp[1]=str.matches("(-|\\+)?\\d+\\.\\d+"); temp[2]=str.matches("(-|\\+)?\\.\\d+"); temp[3]=str.matches("(-|\\+)?\\d+(\\.)?(e|E)(-|\\+)?\\d+"); temp[4]=str.matches("(-|\\+)?\\d+\\.\\d+(e|E)(-|\\+)?\\d+"); temp[5]=str.matches("(-|\\+)?\\.\\d+(e|E)(-|\\+)?\\d+"); for(int i=0;i<6;i++){ result=result||temp[i]; } return result; } }
思路3:与思路2相同,只不过对正则表达式进行了精简。
public boolean isNumber(String s) { String str=s.trim();//删除两端的空格 if(str.length()==0) return false; boolean [] temp=new boolean[4]; temp[0]=str.matches("(-|\\+)?\\d+(\\.)?"); temp[1]=str.matches("(-|\\+)?(\\d+)?(\\.)?\\d+"); temp[2]=str.matches("(-|\\+)?\\d+(\\.)?(e|E)(-|\\+)?\\d+"); temp[3]=str.matches("(-|\\+)?(\\d+)?(\\.)?\\d+(e|E)(-|\\+)?\\d+"); return temp[0]||temp[1]||temp[2]||temp[3]; }
相关文章推荐
- [leetcode]: 66. Plus One
- Leetcode 150题目终结贴 - Valid Number
- Leetcode - Valid Number
- leetcode——66——Plus One
- LeetCode 65 - Valid Number
- 【LeetCode】66. Plus One
- 【LeetCode-66】Plus One(C++)
- [leetcode] 【数组】 66. Plus One
- [leetcode]66. Plus One
- leetcode刷题之旅——66Plus One
- [LeetCode]Valid Number
- leetcode 66: Convert Sorted List to Binary Search Tree
- 【leetcode】Valid Number
- LeetCode——Valid Number
- 2018.3.12 leetcode打卡 #66 plus one
- LeetCode65 Valid Number 解题报告
- [LeetCode]Valid Number
- leetcode--66. Plus One
- [LeetCode] Valid Number
- 【LeetCode 66】Plus One(Python)