[leetcode]65. Valid Number 有效数值

it2025-12-02  8

Validate if a given string can be interpreted as a decimal number.

Some examples:"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => true" -90e3   " => true" 1e" => false"e3" => false" 6e-1" => true" 99e2.5 " => false"53.5e93" => true" --6 " => false"-+3" => false"95a54e53" => false

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:

Numbers 0-9Exponent - "e"Positive/negative sign - "+"/"-"Decimal point - "."

Of course, the context of these characters also matters in the input.

 

思路

There is no complex algorithem, just checking each char from input String

 

代码

1 // {前缀空格}{浮点数}{e}{正数}{后缀空格} 2 class Solution { 3 public boolean isNumber(String s) { 4 int len = s.length(); 5 int i = 0; 6 int right = len - 1; 7 8 // delete white spaces on both sides 9 while (i <= right && Character.isWhitespace(s.charAt(i))) i++; 10 if (i > len - 1) return false; 11 while (i <= right && Character.isWhitespace(s.charAt(right))) right--; 12 13 // check +/- sign 14 if (s.charAt(i) == '+' || s.charAt(i) == '-') i++; 15 16 boolean num = false; // is a digit 17 boolean dot = false; // is a '.' 18 boolean exp = false; // is a 'e' 19 20 while (i <= right) { 21 char c = s.charAt(i); 22 // first char should be digit 23 if (Character.isDigit(c)) { 24 num = true; 25 } 26 else if (c == '.') { 27 // exp and dot cannot before '.' 28 if(exp || dot) return false; 29 dot = true; 30 } 31 else if (c == 'e') { 32 // only one 'e'can exist 33 // 'e' should after num 34 if(exp || num == false) return false; 35 exp = true; 36 // after 'e' should exist num, so set num as default false 37 num = false; 38 } 39 else if (c == '+' || c == '-') { 40 if (s.charAt(i - 1) != 'e') return false; 41 } 42 else { 43 return false; 44 } 45 i++; 46 } 47 return num; 48 } 49 }

 

变种之简化版本的Valid Number : checking +/- numbers including decimal numbers

需要跟面试官confirm

以下哪些算valid,若以下test case中,蓝色字体是valid的

123-123123.123-123.123.123-.123123.123-.

那么:

1.  Decimal point 前面必须是数字

2. Decimal point 后面必须是数字

3. 整个valid number最后是以数字结尾

1 public boolean isNumber(String s) { 2 int len = s.length(); 3 int i = 0; 4 int right = len - 1; 5 6 // delete white spaces on both sides 7 while (i <= right && Character.isWhitespace(s.charAt(i))) i++; 8 if (i > len - 1) return false; 9 while (i <= right && Character.isWhitespace(s.charAt(right))) right--; 10 11 // check +/- sign 12 if (s.charAt(i) == '+' || s.charAt(i) == '-') i++; 13 14 boolean num = false; // is a digit 15 boolean dot = false; // is a '.' 16 17 while (i <= right) { 18 char c = s.charAt(i); 19 if (Character.isDigit(c)) { 20 num = true; 21 } 22 else if (c == '.') { 23 // (1) .. two dots (2) no number before dot (3) - before dot 24 if( dot || num == false || s.charAt(i-1) == '-') return false; 25 dot = true; 26 // check whether there is number after decimal point 27 num = false; 28 } 29 else { 30 return false; 31 } 32 i++; 33 } 34 return num; 35 }

 

转载于:https://www.cnblogs.com/liuliu5151/p/9810576.html

最新回复(0)