LeetCode 65. Valid Number

xiaoxiao2021-02-28  83

题意

验证一个字符串是否为数字

思路

可能会出现的情况:

前导空格和后缀空格字符串存在多个小数点或者多个 e 或者存在其他字母 小数点前面没有数字,这种情况是true e 前面没有数字,这种情况是false e 或者小数点后面没有数字是false

代码

class Solution { public: bool isNumber(string s) { int len = s.length() - 1; int flag = 0; int cnt = 0; int loc = 0; //去除前导空格和后缀空格 while(len >= 0 && s[len] == ' ') len--; while(loc <= len && s[loc] == ' ') loc++; //去除多个字母和多个e for(int i = loc; i <= len; i++){ if(s[i] >= 'a' && s[i] <= 'z'){ if(s[i] =='e'){ cnt++; } else{ flag = 1; break; } } } if(flag) return false; cnt = 0; //去除多个小数点 for(int i = loc; i <= len; i++){ if(s[i] == '.'){ cnt++; } } if(cnt > 1) return false; if(s[loc] == '+' || s[loc] == '-') loc++; //检查前面是否存在数字和小数点 cnt = 0; while(loc <= len && ((s[loc] >= '0' && s[loc] <= '9') || s[loc] == '.')){ if(s[loc] != '.') cnt++; loc++; } if(cnt < 1) return false; if(s[loc] == 'e'){ loc++; if(s[loc] == '+' || s[loc] =='-') loc++; cnt = 0; //检查e后面是否含有数字 while(loc <= len && s[loc] >= '0' && s[loc] <= '9') { cnt++; loc++; } if(cnt < 1) return false; } return loc > len; } };
转载请注明原文地址: https://www.6miu.com/read-96360.html

最新回复(0)