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.
[分析] 体会有限状态机思想的好题,详细分析参考
http://blog.csdn.net/suwei19870312/article/details/12094233
精简的代码真是赏心悦目~
public class Solution {
private enum InputEnum {
invalid, space, sign, digit, dot, exponent
}
private int[][] transitionTable = {
{-1, 0, 3, 1, 2, -1},
{-1, 8, -1, 1, 4, 5},
{-1, -1, -1, 4, -1, -1}, // only accept digits
{-1, -1, -1, 1, 2, -1}, // similar as state 1, but cann't accept sign & space
{-1, 8, -1, 4, -1, 5},
{-1, -1, 6, 7, -1, -1},
{-1, -1, -1, 7, -1, -1},
{-1, 8, -1, 7, -1, -1},
{-1, 8, -1, -1, -1, -1}
};
public boolean isNumber(String s) {
if (s == null || s.length() == 0) return false;
int state = 0;
for (int i = 0; i < s.length(); i++) {
int inputType = InputEnum.invalid.ordinal();
char curr = s.charAt(i);
if (curr == ' ')
inputType = InputEnum.space.ordinal();
else if (curr == '+' || curr == '-')
inputType = InputEnum.sign.ordinal();
else if (curr >= '0' && curr <= '9')
inputType = InputEnum.digit.ordinal();
else if (curr == '.')
inputType = InputEnum.dot.ordinal();
else if (curr == 'e' || curr == 'E')
inputType = InputEnum.exponent.ordinal();
state = transitionTable[state][inputType];
if (state == -1)
return false;
}
return state == 1 || state == 4 || state == 7 || state == 8;
}
}
分享到:
相关推荐
javascript js_leetcode题解之65-valid-number.js
- **2.1.14 Valid Sudoku** - 判断给定的数独是否有效。 - 实现思路:分别检查行、列和小九宫格是否包含重复数字。 - **2.1.15 Trapping Rain Water** - 计算雨水能够困住的水量。 - 实现思路:使用动态规划...
比如"Valid Palindrome"要求判断字符串是否为回文,可以使用双指针法进行检查。"Reverse String"则需要反转字符串,可以利用C++的字符串操作函数实现。 4. **数学逻辑**:一些题目涉及基础数学概念,如质因数分解、...
- **验证回文字符串(Valid Palindrome)**: 判断一个字符串是否是回文。 - **最长回文子串(Longest Palindromic Substring)**: 找出字符串中最长的回文子串。 - **通配符匹配(Wildcard Matching)**: 实现通配符‘*’...
leetcode lintcode差异 ...Valid Triangle Number LeetCode 18. 4Sum (LeetCode 86. Partition List) LintCode 373. Partition Array by Odd and Even Mock Interview 题目 Solution Tag Dynamic Programming
力码解决方案 Leetcode是一个网站,人们——主要是软件工程师——练习他们的编码技能。 有 800 多个问题(并且还在不断增加),每个问题都有多个解决方案。 问题按难度等级排列:简单、中等和...├── Valid Number │
java java_leetcode题解之Number of Valid Words for Each Puzzle.java
20.Valid Parentheses 26.Remove Duplicates from Sorted Array 53.Maximum Subarray 70.Climbing Stairs 121.Best Time to Buy and Sell Stock 122.Best Time to Buy and Sell Stock II 123.Best Time to Buy and ...
【字符串知识】 在编程面试中,字符串是常...例如《合并两个有序数组》(https://leetcode-cn.com/problems/merge-sorted-array/)、《最大数字》(https://leetcode-cn.com/problems/largest-number/)以及《最大间距》...
Number 回文数 11 Container With Most Water 盛最多水的容器 13 Roman to Integer 罗马数字转整数 14 Longest Common Prefix 最长公共前缀 20 Valid Parentheses 有效的括号 26 Remove Duplicates from Sorted ...
leetcode最难LeetCode_ValidNumber 因为我疯了,所以我去了 LeetCode,并按 Hardest:LeastSolved 排序。 没有汗! 语言:C# 我学到的是 这个很疯狂,因为它在定义实际可以算作数字方面确实做得很差。 如果这是面对面...
leetcode 力码锈 问题 # 标题 命令 1 cargo run --bin 1-two-sum 2 cargo run --bin 2-add-two-numbers 3 cargo run --bin 3-longest-substring-without-repeating-characters 7 cargo run --bin 7-reverse-integer ...
leetcode 分类C++ Boost 演示 观察如何用 . 还要观察标题模板如何“爆炸”出来,即。 我包含了 2 个头文件,并且有一大堆头文件由bcp提取用于静态编译。 OSX 构建说明 通过安装 Boost 和 CMake brew install boost ...
Valid Sudoku 数组 遍历 Sudoku Solver 深度优先遍历 回溯 先检查后修改 Group Anagrams 排序 unordered_map Minimum Window Substring 两个指针遍历 map Maximal Rectangle 栈 局部递增 或者 动态规划 Binary Tree ...
1_TwoSum 9_PalindromeNumber 13_RomanToInteger 14_LongestCommonPrefix 20_ValidParentheses 21_MergeTwoSortedLists 26_RemoveDuplicatesFromSortedArray 27_RemoveElement 28_ImplementStrStr() 35_Search...
single-number 动态规划 candy 贪心 gas-station 动态规划 palindrome-partitioning-ii 动态规划 triangle 树 sum-root-to-leaf-numbers 动态规划 distinct-subsequences 递归 valid-palindrome 模拟 pascals-...
Leetcode的ac是什么意思 LeetCodeInJava List #98 Validate Binary Search Tree #100 Same Tree #104 Maximum Depth of Binary Tree #122 Best Time to Buy and Sell Stock II #136 Single Number #150 Evaluate ...
number of nodes along the shortest path from the root node down to the nearest leaf node. 解题思路: 思路一:深度优先遍历,递归遍历左右子树,遇到叶子节点时返回 1,返回过程中,比较左右子树,较小深度...
比如“有效的括号”(Valid Parentheses)使用栈来检查括号的正确性,而“用队列实现栈”(Implement Queue using Stacks)则展示了它们的灵活应用。 3. **堆**:最大堆和最小堆常用于优先队列和优化问题。例如,...
leetcode 浇花力扣解决方案 简单的 #0001 - Two Sum #0007 - Reverse Integer #0009 - Palindrome Number #0035 - Search Insert Position #0058 - Length of Last Word #0066 - Plus One #0083 - Remove Duplicates...