C# 泛型玩法1
阿新 • • 發佈:2021-01-15
技術標籤:java演算法
題目 劍指 Offer 20. 表示數值的字串
請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示數值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。
思路
分情況判斷
複雜度分析
時間:O(n)
空間: O(1)
程式碼
class Solution {
public boolean isNumber(String s) {
if(s == null || s.length() == 0) {
return false;
}
s = s.trim();// 去除前後空格
boolean numSeen = false;
boolean dotSeen = false;
boolean eSeen = false;
for(int i = 0; i < s.length(); ++i) {
char c = s.charAt (i);
if(c >= '0' && c <= '9') {
numSeen = true;
} else if (c == '.') { // .前不能有e或.
if(dotSeen || eSeen) {
return false;
}
dotSeen = true;
} else if (c == 'e' || c == 'E' ) { //e前不能有e,且要為數字
if(eSeen || !numSeen) {
return false;
}
eSeen = true;
numSeen = false; // e的後面也要是數字,排除123e+
} else if (c == '+' || c == '-') { // +或-只能出現再開頭或者e的後面(+/-前面必須要為e)
if (i != 0 && (s.charAt(i - 1) != 'e' && s.charAt(i - 1) != 'E')) {
return false;
}
} else {
return false;
}
}
return numSeen;
}
}