leetcode 65题 有效数字
有效数字(按顺序)可以分成以下几个部分:
一个 小数 或者 整数 (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数 小数(按顺序)可以分成以下几个部分:
(可选)一个符号字符(’+’ 或 ‘-‘) 下述格式之一: 至少一位数字,后面跟着一个点 ‘.’ 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字 一个点 ‘.’ ,后面跟着至少一位数字 整数(按顺序)可以分成以下几个部分:
(可选)一个符号字符(’+’ 或 ‘-‘) 至少一位数字
部分有效数字列举如下:
[“2”, “0089”, “-0.1”, “+3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e+7”, “+6e-1”, “53.5e93”, “-123.456e789”] 部分无效数字列举如下:
[“abc”, “1a”, “1e”, “e3”, “99e2.5”, “–6”, “-+3”, “95a54e53”] 给你一个字符串 s ,如果 s 是一个 有效数字 ,请返回 true 。
示例1
输入:s = "0"
输出:true
示例2
输入:s = "e"
输出:false
思路
遵循以下规则:
数字: 0 < x < 9
点号:之前没有出现点号并没有出现e
e或者E: 之前没有出现e并且出现了数字
+或者-: 第一位或者前面是e
代码
/**
* @param {string} s
* @return {boolean}
*/
function isNumber(s) {
let numFlag = false, dotFlag = false, eFlag = false;
for (let i=0; i<s.length; i++) {
if ('0' <= s[i] && s[i] <= '9') {
numFlag = true;
} else if (s[i] === '.' && !dotFlag && !eFlag) {
dotFlag = true;
} else if ((s[i] === 'e' || s[i] === 'E') && !eFlag && numFlag) {
eFlag = true;
numFlag = false;
} else if ((s[i] === '+' || s[i] === '-') && (i === 0 || s[i-1] === 'e' || s[i-1] === 'E')) {
continue;
} else {
return false;
}
}
return numFlag;
}
复杂度分析:
- 时间复杂度: O(N)
- 空间复杂度:O(1)
FEATURED TAGS
前端开发
H5
JavaScript
设计模式
browser
jQuery
源码分析
生活
leetcode
Array
Stack
Queue
Linked List
剑指offer
Binary Search Tree
Binary Tree
Breadth-First Search
Depth-First Search
String
Set
Binary Search
Sliding Window
Backtracking
Dynamic Programming
Two Pointers
Union Find
Sort
Bit Operation
Recursion
Map
Graph
Search
Hash
LinkedList
复盘
QuickSort
Trie
Design
MinHeap
Traverse
Min Heap
Node.js
BackEnd
SQL
MySQL
Design Patterns
Network
计算机网络
Python
SVG