剑指 Offer 20. 表示数值的字符串 发表于 2022-05-08 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768class Solution { public boolean isNumber(String s) { int i = 0, j = s.length() - 1; // skip whitespace while (i < j && s.charAt(i) == ' ') { i++; } while (i < j && s.charAt(j) == ' ') { j--; } // s[i, j] char c = s.charAt(i); if (c == ' ') { return false; } // skip sign symbol if (c == '+' || c == '-') { i++; } boolean hasDot = false, hasNum = false; for (int k = i; k <= j; k++) { c = s.charAt(k); if (c == '.') { if (!hasDot) { hasDot = true; } else { return false; } } else if (c >= '0' && c <= '9') { hasNum = true; } else if (c == 'e' || c == 'E') { return hasNum && isInteger(s, k + 1, j); } else { return false; } } return hasNum; } private boolean isInteger(String s, int i, int j) { if (i > j) { return false; } char c = s.charAt(i); if (c == '+' || c == '-') { i++; } if (i > j) { return false; } for (int k = i; k <= j; k++) { c = s.charAt(k); if (c < '0' || c > '9') { return false; } } return true; }} Reference剑指 Offer 20. 表示数值的字符串