描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
示例一:
输入:
"123.45e+6"
返回值:
true
示例二:
输入:
"1.2.3"
返回值:
false
题目简述
给定一个字符串判断它是否为表示数值。
算法一: 分治 (C++)
时间复杂度:O(N)
思路:
1. 对于数字来说:必须存在数字。
2. 对于 ' . ' 来说: (1) : 只能出现一次。
(2) : 不能在 e / E 的后面。
3. 对于e、E来说: (1) : 只能出现一次。
(2) : 前面一位 和 后面一位或者两位 必须是数字。
4. 对于 ' + ' 、' - ' 来说: 只能出现在 首位 或者 e/E的后面一位。
代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
bool digit(char ch){ //判断是否是数字
if(ch>='0'&&ch<='9') return true;
return false;
}
bool isNumeric(string str) {
// write code here
int exp=0;//是否出现过E、e
int dot=0;//是否出现过 '.'
int sym=0;//是否出现过 +、-
int dig=0;//是否出现过数字
int len=str.size();
for(int i=0;i<len;i++){
if(str[i]=='.'){
if(dot||exp) return false;
dot=1;
}
else if(str[i]=='e'||str[i]=='E'){
if(exp||!(digit(str[i-1])&&(digit(str[i+1])||digit(str[i+2])))) return false;
exp=1;
}
else if(str[i]>='0'&&str[i]<='9'){
dig=1;
continue;
}
else if(str[i]=='+'||str[i]=='-'){
if(i!=0&&!(str[i-1]=='e'||str[i-1]=='E')) return false;
}
else return false;
}
return dig;
}
};
算法二:
时间复杂度:O(N)
思路:
直接利用函数将字符串转化为数字,若是异常说明该字符串不能表示数字,则进行异常处理,返回false即可。
代码:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
public boolean isNumeric (String str) {
// write code here
try{
Double res=Double.parseDouble(str);
return true;
}catch(Exception e){
return false;
}
}
}

京公网安备 11010502036488号