299. 猜数字游戏 js实现

这道题我认为是一道很经典的题目,能理解这个解题思路之后,就会有一种豁然开朗的感觉,让我们一起康康叭~

先来对题意分析一波:

公牛:位置和数字都对应的上

解法:secret[i]=guess[i]

母牛:除了公牛之外,有相同数字的对数,(’11‘,‘11’这是两对哦🎅)

解法思路:

看下面这个好对比吗?不好对比,我们稍稍调整一下

这样再看是不是就一目了然了,只需要对比相同索引下secret[i]和guess[i]

取secret[i]和guess[i]最小值,Math.min(arrSecret[i],arrGuess[i]),为什么取最小值?

见下图:

secret中有2个1,arrGuess中有3个1,那满足母牛条件的(有几对相同数字的)有2对,所以取最小值。

现在来看下代码

var getHint = function (secret, guess) {
  var x = 0;
  var y = 0;
  //创建两个数组,每个数组都有从10个元素,全是0(为了记录从0-9元素出现的次数)
  var arrSecret = new Array(10).fill(0);
  var arrGuess = new Array(10).fill(0);
  for (var i = 0; i <= secret.length - 1; i++) {
      //位置和数字都对应的上,累加得到公牛个数
    if (secret[i] === guess[i]) {
      ++x;
    } else {
        //数字出现的次数,相当于就是索引出现的次数
      ++arrSecret[secret[i]];
      ++arrGuess[guess[i]];
    }
  }
  //取最小值,累加为母牛个数
  for (var i = 0; i <= 9; i++) {
    y += Math.min(arrSecret[i], arrGuess[i]);
  }
  //字符串拼接,直接+即可
  return x + 'A' + y + 'B';
};

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值