• leetcode刷题笔记299题 猜数字游戏


    leetcode刷题笔记299题 猜数字游戏

    源地址:299. 猜数字游戏

    问题描述:

    你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:

    你写出一个秘密数字,并请朋友猜这个数字是多少。
    朋友每猜测一次,你就会给他一个提示,告诉他的猜测数字中有多少位属于数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位属于数字猜对了但是位置不对(称为“Cows”, 奶牛)。
    朋友根据提示继续猜,直到猜出秘密数字。
    请写出一个根据秘密数字和朋友的猜测数返回提示的函数,返回字符串的格式为 xAyB ,x 和 y 都是数字,A 表示公牛,用 B 表示奶牛。

    xA 表示有 x 位数字出现在秘密数字中,且位置都与秘密数字一致。
    yB 表示有 y 位数字出现在秘密数字中,但位置与秘密数字不一致。
    请注意秘密数字和朋友的猜测数都可能含有重复数字,每位数字只能统计一次。

    示例 1:

    输入: secret = "1807", guess = "7810"
    输出: "1A3B"
    解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。
    示例 2:

    输入: secret = "1123", guess = "0111"
    输出: "1A1B"
    解释: 朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。

    说明: 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等。

    object Solution {
        def getHint(secret: String, guess: String): String = {
            val len = secret.length
            //记录数字访问情况
            var arr = Array.fill(10)(0)
            var b = 0
            var c = 0
    
            for (i <- 0 to len-1) {
                val cs = secret(i)
                val cg = guess(i)
                //位置且字符均对,记录公牛
                if (cs == cg) b += 1
                else {
                    //println("------------------")
                    //println("i: " + i)
                    //说明之前已经被猜测过,猜测得到了验证,记录奶牛
                    if (arr(cs - '0') < 0) c += 1
                    arr(cs - '0') += 1
                    //说明之前已经证实过,当前猜测正确,记录奶牛
                    if (arr(cg - '0') > 0) c += 1
                    arr(cg - '0') -= 1
                    //println("c: " + c)
                    //println(arr.mkString)
                }
            }
            return b + "A" + c + "B"
        }
    }
    
    func getHint(secret string, guess string) string {
        len := len(secret)
        arr := []int{0,0,0,0,0,0,0,0,0,0}
        b := 0
        c := 0
    
        for i := 0; i < len; i++ {
            s := secret[i]
            g := guess[i]
            if s == g {
                b++
            } else {
                if arr[s-'0'] < 0 {
                    c++
                }
                arr[s-'0'] += 1
                if arr[g-'0'] > 0 {
                    c++
                }
                arr[g-'0'] -= 1
            }
        }
    
        return strconv.Itoa(b) + "A" + strconv.Itoa(c) + "B"
    }
    
  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/14013608.html
Copyright © 2020-2023  润新知