1. 题目

验证给定的字符串是否可以解释为十进制数字。

例如:
"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
说明: 我们有意将问题陈述地比较模糊。
在实现代码之前,你应当事先思考所有可能的情况。
这里给出一份可能存在于有效十进制数字中的字符列表:数字 0-9
指数 - "e"
正/负号 - "+"/"-"
小数点 - "."
当然,在输入中,这些字符的上下文也很重要。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

《剑指Offer》同题:面试题20. 表示数值的字符串

2. 解题

  • 先找指数e,E的位置,将字符切分成前后2部分
  • 判断前后,都必须要有数字,不能有其他非法字符
  • 前后+ -号必须在第一位
  • 后半部不能有点.
class Solution {public:bool isNumber(string s) {//去除尾部空格while(!s.empty() && s.back() == ' ')s.pop_back();while(!s.empty() && s.front() == ' ')s.erase(s.begin());//忽略头部空格if(s.empty())return false;int idx1 = s.find('E');int idx2 = s.find('e');if(idx1 == -1 && idx2 == -1)return check1(s);//没有指数,直接判断数字if(idx1 != -1)//找到指数,分成两半检查(s1)E(s2)return (check1(s.substr(0,idx1)) && check2(s.substr(idx1+1)));else //找到指数,分成两半检查(s1)e(s2)return (check1(s.substr(0,idx2)) && check2(s.substr(idx2+1)));}bool check1(string s) {    //前半部分if(s.empty())return false;int dot = 0;bool number = false;for(int i = 0; i < s.size(); i++){if((s[i]=='+' || s[i] == '-')){  //符号不在第一位if(i != 0)return false;}else if(s[i] == '.')dot++;else if(isdigit(s[i]))number = true;else//其他字符return false;}if(dot > 1 || !number)return false;return true;}bool check2(string s){    //检查后半部分,不能有 . 点if(s.empty())return false;bool number = false;for(int i = 0; i < s.size(); i++){if((s[i]=='+' || s[i] == '-')){  //符号不在首if(i != 0)return false;}else if(s[i] == '.')//指数不能有点return false;else if(isdigit(s[i]))number = true;else//其他字符return false;}if(!number)return false;return true;}
};

LeetCode 65. 有效数字(逻辑题,难)相关推荐

  1. Java实现 LeetCode 65 有效数字

    65. 有效数字 验证给定的字符串是否可以解释为十进制数字. 例如: "0" => true " 0.1 " => true "abc&q ...

  2. [LeetCode]65. 有效数字

    65. 有效数字 难度:困难 有效数字(按顺序)可以分成以下几个部分: 一个 小数 或者 整数 (可选)一个 'e' 或 'E' ,后面跟着一个 整数 小数(按顺序)可以分成以下几个部分: (可选)一 ...

  3. LeetCode - #65 有效数字

    前言 我们社区陆续会将顾毅(Netflix 增长黑客,<iOS 面试之道>作者,ACE 职业健身教练.)的 Swift 算法题题解整理为文字版以方便大家学习与阅读. LeetCode 算法 ...

  4. leetcode 65. 有效数字(正则表达式)

    题目 有效数字(按顺序)可以分成以下几个部分: 一个 小数 或者 整数 (可选)一个 'e' 或 'E' ,后面跟着一个 整数 小数(按顺序)可以分成以下几个部分: (可选)一个符号字符('+' 或 ...

  5. 网络中超难的75道逻辑题及答案

    网络中超难的75道逻辑题及答案 [1]假设有一个池塘,里面有无穷多的水.现有2个空水壶,容积分别为5升和6升.问题是如何只用这2个水壶从池塘里取得3升的水. 由满6向空5倒,剩1升,把这1升倒5里,然 ...

  6. 史上最难逻辑题!据说99.9%的人都做不出来……

    全世界只有3.14 % 的人关注了 爆炸吧知识 非常「逻辑」 撩人于无形 普林斯顿大学博士生 Raymond Smullyan 是一位非常厉害逻辑高手. 在Smullyan与他非常迷恋的女音乐家的第一 ...

  7. 前端面试常见逻辑题收集及分析

    前端面试中常出现一些有趣的逻辑题,初见的时候有可能会手足无措,但实际多看几个题之后就会有一定的思考逻辑,有种打通任督二脉的感觉.以下是我个人面试经历以及网络上收集来的一些经典题目. 题目: 1.现有一 ...

  8. LeetCode中的那些题

    目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 *******4.寻找两个有序数组的中位数(官方解答) : 5.最长回文子串(官方解答) 15. 三数之和 16. 最接近的三数之和 ...

  9. 视频教程-算法设计与编算法设计与编程实践---基于leetcode的企业真题库程实践-C/C++

    算法设计与编算法设计与编程实践---基于leetcode的企业真题库程实践 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟仿 ...

最新文章

  1. ViaWest公司的光纤将连接微软新的跨太平洋电缆
  2. unittest 出报告 并配合 jenkins,发现有用例错误,但是构建没出现红点 的解决方法
  3. 盘点几个值得你借鉴的Java学习方法
  4. Java数组对象的内存布局
  5. Apache Commons:Betwixt介绍
  6. windows nt service 框架
  7. electronics.local在SAP Hybris中出现的几个位置
  8. MYSQL数据库应用优化
  9. 22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕
  10. React 的 Hello World
  11. 单例销毁_TypeScript 设计模式之单例模式
  12. NLP之路-Deep Learning for NLP 文章列举
  13. 【计算机视觉-从入门到精通系列】 第一章 基础知识
  14. 信号检测与判决的五大准则
  15. 用户体验测试的心得体会
  16. BEGAN(Boundary Equilibrium GenerativeAdversarial Networks)-pyTorch实现
  17. 一只小白,在学习delphi.感觉很吃力。。
  18. python----语句
  19. 【微信小程序】图片被压扁怎么办?在image中添加 mode=widthFix
  20. 申请微信公众号,当前绑定的银行卡暂不支持实名验证...

热门文章

  1. ap模式和sta模式共存_AP+AC组网下的本地转发及集中转发
  2. 数据结构:神奇的B树实现解析(有图有代码有真相!!!)
  3. 宏定义函数container_of的解释
  4. vim显示行号、多行复制和删除
  5. 函数参数的值传递和地址传递
  6. 【传智播客】Libevent学习笔记(三):事件循环
  7. k8s 组件介绍-API Server
  8. 【HNOI2013】数列
  9. Linux下编译Jsoncpp
  10. [芦半山]Binder的异常机制