• JS leetcode 猜数字 题解分析,我以为题目在第八层我在第一层,其实我在第三层题目在第一层


    壹 ❀ 引

    今天来做一道简单到让我一度怀疑题目本意的题目,题目来自leetcode LCP 01. 猜数字,题目描述如下:

    小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?

    输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。

    示例 1:

    输入:guess = [1,2,3], answer = [1,2,3]
    输出:3
    解释:小A 每次都猜对了。
    

    示例 2:

    输入:guess = [2,2,3], answer = [3,2,1]
    输出:1
    解释:小A 只猜对了第二次。
    

    限制:

    guess的长度 = 3
    answer的长度 = 3
    guess的元素取值为 {1, 2, 3} 之一。
    answer的元素取值为 {1, 2, 3} 之一。

    我们简单分析题目,来说说怎么实现它!

    贰 ❀ 思路分析

    首先,题目说小A与小B每次都是从1,2,3中随机选择一个数字进行对比,一共比较三次,我第一感觉就是得算数两个数组比较的所有可能性。

    但当我看了2个例子,我就懵了,为啥guess与answer完全一样时小A就猜对了三次,当guess与answer只有索引为1的元素相同时小A只猜对了第二次。可见题目本意就是想我们按顺序依次比较元素,直到比较完成看有几次相等而已(这真的是我在leetcode遇到最简单的题目了)。

    使用一次遍历来解决:

    /**
     * @param {number[]} guess
     * @param {number[]} answer
     * @return {number}
     */
    var game = function (guess, answer) {
        let sum = 0,
            k = guess.length - 1;
        while (k >= 0) {
            if (guess[k] === answer[k]) {
                sum++;
            };
            k--;
        };
        return sum;
    };
    

    使用两次遍历来解决:

    /**
     * @param {number[]} guess
     * @param {number[]} answer
     * @return {number}
     */
    var game = function (guess, answer) {
        let sum = 0;
        for(let i = 0;i < guess.length;i++ ){
            for(let j = 0;j < answer.length;j++){
                // 索引相同,且元素相同则自增
                if(guess[i] === answer[j] && i === j){
                    sum++;
                };
            };
        };
        return sum;
    };
    

    再或者,不用遍历,来自评论区的暴力解题法:

    /**
     * @param {number[]} guess
     * @param {number[]} answer
     * @return {number}
     */
    var game = function (guess, answer) {
        return (guess[0] === answer[0]) + (guess[1] === answer[1]) + (guess[2] === answer[2]);
    };
    

    这里正是利用布尔值在计算中,true会转换成1,false转换成为0的特性,不得不佩服网友的脑洞...

    由于这题很简单,那么就说到这了。

  • 相关阅读:
    绿色版 notepad++ 添加鼠标右键菜单
    Scala 安装与配置
    Scala 神奇的下划线 _
    Kafka 安装部署
    Pulsar 下一代消息平台
    Sqoop 安装部署
    Flume 常用配置项
    Android-selector
    android- 9patch
    有关内存的思考题
  • 原文地址:https://www.cnblogs.com/echolun/p/13087354.html
Copyright © 2020-2023  润新知