๐ 65. ๆๆๆฐๅญ
2022ๅนด10ๆ10ๆฅ
- algorithm
๐ 65. ๆๆๆฐๅญ
้พๅบฆ: ๐
้ฎ้ขๆ่ฟฐ
่งฃๆณ
class Solution {
public boolean isNumber(String s) {
// ๆ่ทฏ๏ผ
// ๆ นๆฎ่ฆๆฑ๏ผๅๅคๆญๆกไปถ
int len = s.length();
int index = 0;
int flag = 0; // ๅคๆญๆฏๅฆๆ ้ฆ +/-
// ๆพๅฐ e๏ผ่ฟ่กๆๅ
for(int i = index; i < len; i ++) {
if(s.charAt(i) == 'e' || s.charAt(i) == 'E') {
if(i > 0 && i + 1 <= len - 1 && isPosInt(s, i + 1, len - 1)) {
s = s.substring(0, i);
break;
} else {
return false;
}
}
}
len = s.length();
if(len == 1 && !isDigit(s.charAt(0))) {
return false;
}
if(s.charAt(0) == '+' || s.charAt(0) == '-') {
flag = 1;
index ++;
}
while(index < len) {
if(isDigit(s.charAt(index))) {
index ++;
} else if(s.charAt(index) == '.') {
if(index + 1 <= len - 1 && isInt(s, index + 1, len - 1)) {
return true;
} else if(index + 1 > len - 1) {
// . ๅ้ขๆฒกๆๆฐๅญ
if(index > 1 || (index == 1 && flag == 0)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
return true;
}
private boolean isInt(String s, int left, int right) {
if(left > right) {
return false;
}
for(int i = left; i <= right; i ++) {
if(!isDigit(s.charAt(i))) {
return false;
}
}
return true;
}
private boolean isPosInt(String s, int left, int right) {
if(s.charAt(left) == '+' || s.charAt(left) == '-') {
return isInt(s, left + 1, right);
} else {
return isInt(s, left, right);
}
}
private boolean isDigit(char c) {
if(c >= '0' && c <= '9') {
return true;
} else {
return false;
}
}
}