乐扣困难题(65)js--有效数字

从慕课网课程中截来的图

解题步骤:
①构建一个表示状态的图;

②遍历字符串,并沿着图走,如果到了某个节点无路可走就返回false;

③遍历结束,如果走到了3/5/6就返回true,否则返回false

其实整体思路不难,但是代码是抄来的,关键就是要能够画出来状态图

for(c of s)其实就可以遍历s中的每一个元素,但是加上s.trim()的时候,就可以将前后的空格去除,减小资源占用率

/**
 * @param {string} s
 * @return {boolean}
 */
var isNumber = function(s) {
    const graph = {
        0 : {'blank':0,'sign':1,'.':2,'digit':6},
        1 : {'digit':6,'.':2},
        2 : {'digit':3},
        3 : {'digit':3,'e':4,'E':4},
        4 : {'digit':5,'sign':7},
        5 : {'digit':5},
        6 : {'digit':6,'.':3,'e':4,'E':4},
        7 : {'digit':5},
    }
    let state=0;
    for(c of s.trim()) {
        if(c>='0' && c<='9') {
            c='digit';
        }else if(c==='') {
            c='blank'
        }else if(c==='+' || c==='-') {
            c='sign'
        }
        state=graph[state][c];
        if(state===undefined) {
            return false;
        }
    }
    if(state==3 || state==5 ||state==6) {
        return true
    }
    return false
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值