65. Valid Number&&剑指 Offer 20. 表示数值的字符串(Leetcode每日一题-2020.09.02)

tech2022-08-05  146

Problem

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。

Solution

class Solution { public: bool isNumber(string s) { int l = 0, r = s.size() - 1; //去掉首尾的空格 while (l <= r && s[l] == ' ') l ++ ; while (l <= r && s[r] == ' ') r -- ; if (l > r) return false; s = s.substr(l, r - l + 1); //去掉符号位 if (s[0] == '+' || s[0] == '-') s = s.substr(1); if (s.empty())//如果只有符号位或空格,就是false return false; //如果只有“.”或“.e”或“.E”,就是false if (s[0] == '.' && (s.size() == 1 || s[1] == 'e' || s[1] == 'E')) return false; //遍历剩下的字符串 //dot记录.的个数,e记录e/E的个数 int dot = 0, e = 0; for (int i = 0; i < s.size(); i ++ ) { if (s[i] == '.') { if (dot > 0 || e > 0) //如果当前是.,且之前出现了.或e的话,就是false return false; dot ++ ; } else if (s[i] == 'e' || s[i] == 'E') { if (!i || i + 1 == s.size() || e > 0) //如果当前是e,且它前面为空或后面为空或者之前出现过e,就是false return false; if (s[i + 1] == '+' || s[i + 1] == '-') { if (i + 2 == s.size()) //如果当前是e,下一位是+或-,没有下下一位了,就是false return false; i ++ ;//跳过符号位 } e ++ ; } else if (s[i] < '0' || s[i] > '9') return false; } return true; } };
最新回复(0)