LeetCode 65. 有效数字(模拟,C++)
2021/5/21 12:54:57
本文主要是介绍LeetCode 65. 有效数字(模拟,C++),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
LeetCode 65. 有效数字
分析
1.找到字符串中字符’e’或者’E’第一次出现的位置。
2.如果存在字符’e’或者’E’第一次出现的位置,那么可以将字符串分为两部分进行检查是否合法,
‘e‘或者’E’之前的部分可以是整数或者小数,'e’或者’E’之后的部分必须是整数。
3.如果字符’e’和字符’E’都没有出现过,则整个字符串可以是整数,也可以是小数。
4.判断是否是合格的整数或者小数
4.1 正负号只能出现在开头。 4.2 如果要求不一定是整数,字符'.'最多出现一次;如果要求一定是整数,字符'.'不能出现。 4.3 字符串中至少有一个数字。 ## 代码
class Solution { public: //solve函数的作用是判断某个字符串是否为合法的数字,s为字符串,must_int标记是否一定是整数 //注意:这里的形参s必须要有const修饰 bool solve(const string& s, bool must_int) { //e前面部分为空、e后面部分为空以及整个字符串为空 if (s.empty()) return false; //判断第一个字符是否为正负号,如果是,则从下标为1的字符开始遍历;如果不是,则从下标为0的字符开始遍历 int st = int(s[0] == '+' || s[0] == '-'); //has_dot标记是否出现过小数点,has_digit标记是否出现过阿拉伯数字 bool has_dot = false, has_digit = false; //开始遍历每一个字符 for (int i = st; i < s.size(); i++) { //如果当前字符是小数点 if (s[i] == '.') { //如果要求一定是整数,则不可以出现小数点; if (must_int) return false; //如果之前已经出现过小数点,也是false if (has_dot) return false; has_dot = true; } else if (isdigit(s[i])) { has_digit = 1; } else { //除了数字和小数点的其他情况,只能是false return false; } } //如果出现过阿拉伯数字,则返回true;否则返回false return has_digit; } bool isNumber(string s) { int e_idx = s.find('e');//字符'e'第一次出现的下标 int E_idx = s.find('E');//字符'E'第一次出现的下标 if (e_idx != string::npos) return solve(s.substr(0, e_idx), false) && solve(s.substr(e_idx + 1), true); if (E_idx != string::npos) return solve(s.substr(0, E_idx), false) && solve(s.substr(E_idx + 1), true); return solve(s, false); } };
这篇关于LeetCode 65. 有效数字(模拟,C++)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享