[Codewars]-Find the unknown digit

在Codewars的挑战中,解决寻找使等式成立的未知数问题。关键点包括:禁止连续0、减号代表加号、未知数是未出现的数字,且要返回最小的解。若无解则返回-1。通过理解规则直接编程,注意避免返回错误的数字(如00非法,1已出现,因此返回2)。大神的解决方案使用了ES6特性,激励学习更多ES6知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[Codewars]-Find the unknown digit

题目:
  • 找到使等式成立的未知数
  • 有几条原则:
    • 两个0连续00,这是一个不合法的数字
    • 两个减号--,其实是一个加号+
    • 未知数是等式里未出现过的数字
    • 如果有多个数字使等式成立,返回最小的
    • 如果未找到使等式成立的数字,返回-1
思路
  • 看清楚题目的原则时候,直接写代码就行
  • 一定要记住的是未知数是等式里未出现过的数字 ,你就不会有?*11=??,为啥返回2这个问题了(因为00是不成立的,而且1出现过,故返回2)
解答:
function solveExpression(exp) {
  exp = exp.replace('=','==').replace('--','+')
  for(var i = 0 ; i <= 9 ; i ++){
    var flag = exp.indexOf(i)==-1
    var str = exp.replace(/\?/g,i);
    if(/^00/.test(str)||/^00/.test(str.split('==')[1])){continue}
    try{
      if(eval( str )&&flag){
        return i;
        break;
      }
    }catch(e){
    }
  }
  return -1

}
  • 大神的做法
function solveExpression(exp) {
  exp = exp.replace('=','==').replace('--','+');
  for(var i = 0; i < 10; i++){
    if(eval(exp.replace(/\?/g,i)) && !exp.includes(i)){
        if(!/^00+$/.test(exp.replace(/\?/g,i).split('==')[1]))  return i;
    }
  }
  return -1;
}
  • 后记:发现大神的做法都是ES6的新东西,自己渣渣还不是很懂es6,要去学一波了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值