1. 首页

065. 有效数字

题目描述:

难度:Hard

相关话题:数学字符串

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

例如:

"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”

  • 正/负号 – “+”/”-“

  • 小数点 – “.”

当然,在输入中,这些字符的上下文也很重要。

更新于 2015-02-10:
C++ 函数的形式已经更新了。如果你仍然看见你的函数接收 const char * 类型的参数,请点击重载按钮重置你的代码。


思路:

这道题涉及的情况很多,先理顺各种情况先后关系,针对s[i]的每一种情况,写下来,然后再写代码,会清晰很多。

s[i]
空   如果前面什么都没有,继续;
    否则后面就不能有任何除了"空"以外的

Num 前面如果有"e",则后面不能有"+-"

e   前面必须有"Num"
    前面不能有"e"
    后面必须有"Num"

+-  如果前面有"Num",前面一定要有"e"
    如果前面有"." 前面一定要有"Num",有"e"
    如果前面有"+-",前面一定有"Num",有"e"
    如果前面有"e",前面一定要有"Num"

.   前面不能有"."
    前面不能有"e"
/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {string} s
 * @return {boolean}
 */
var isNumber = function(s) {
  let needNum=false,nothing=true,noAnything=false,noSign=false
  let hasNum=false,hasPoint=false,hasState=false,hasE=false
  for(let i=0;i<s.length;i++){
    if(s[i]===" "){
      if(nothing)continue
      noAnything=true
      continue
    }else if(noAnything){
      return false
    }else if(s[i]==="+" || s[i]==="-"){
      if(noSign)return false
      if(hasNum && !hasE) return false
      if(hasPoint && (!hasNum || !hasE))return false
      if(hasState && (!hasNum || !hasE))return false
      if(hasE && !hasNum)return false
      hasState=true
    }else if(/\d/.test(s[i])){
      if(needNum)needNum=false
      if(hasE)noSign=true
      hasNum=true
    }else if(s[i]==="e"){
      if(!hasNum)return false
      if(hasE)return false
      hasE=true
      needNum=true
    }else if(s[i]==="."){
      if(hasPoint)return false
      if(hasE)return false
      hasPoint=true
    }else{
      return false
    }
    nothing=false
  }
  return !needNum && !nothing && hasNum
};

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:065. 有效数字

链接:https://www.javascriptc.com/4425.html

« 066. 加一
从零开始针对 .NET 应用的 DevOps 运营实践 – Jenkins & SonarQube 安装配置»
Flutter 中文教程资源

相关推荐

QR code