65. 有效數字
第19次才通過,前面錯了18次。。。
相信我,不用了解或者分析我的代碼,一遍一遍去自己嘗試吧少年,十幾次後你就會做出來了
你會感受到這個題帶來的誠意的
class Solution {
public boolean isNumber(String s) {
// 去掉前後空格
s = s.trim();
if (s.length() == 0) return false;
if (s.charAt(0) == '-' || s.charAt(0) == '+') {
if (s.length() == 1) {
return false;
}
s = s.substring(1);
}
// 去掉前導0
while (s.charAt(0) == '0') {
if (s.length() == 1) {
// 就剩一個0了
return true;
}
if (s.charAt(1) == '.' || s.charAt(1) == 'e') {
// 應對比如0000.123這種情況
break;
}
s = s.substring(1);
}
// 處理e後面出現+-号的情況
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'e') {
if (i + 1 < s.length()) {
if (s.charAt(i + 1) == '-' || s.charAt(i + 1) == '+') {
String newS = "";
newS = s.substring(0, i + 1);
if (i + 2 < s.length()) {
newS += s.substring(i + 2);
}
s = newS;
}
}
}
}
boolean flag = false;
boolean dflag = false;
boolean eflag = false;
boolean numFlag = false;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (!isnum(ch)) {
if (ch == '.' || ch == 'e') {
if (ch == 'e') {
// e前面必須有數字,而。不用
if (!numFlag) return false;
}
if (ch == 'e' && (i + 1 >= s.length())) {
// e後面必須有數字
return false;
}
if (flag) {
// 。 or e隻能出現1次
if (ch == 'e' && dflag && !eflag) {
eflag = true;
continue;
}
return false;
}
if (ch == '.' && i + 1 < s.length() && s.charAt(i + 1) == 'e' && numFlag && i + 2 < s.length()) {
// 特判: .e 同時出現時- -
i++;
}
flag = true;
if (ch == '.') dflag = true;
if (ch == 'e') eflag = true;
continue;
}
return false;
} else {
numFlag = true;
}
}
return numFlag;
}
public boolean isnum(char ch) {
return ch >= '0' && ch <= '9';
}
}
轉載于:https://www.cnblogs.com/acbingo/p/9363295.html