299猜數字遊戲(力扣)

2021-10-08 15:48:53 字數 1608 閱讀 4526

你在和朋友一起玩 猜數字(bulls and cows)遊戲,該遊戲規則如下:

1.你寫出乙個秘密數字,並請朋友猜這個數字是多少。

2.朋友每猜測一次,你就會給他乙個提示,告訴他的猜測數字中有多少位屬於數字和確切位置都猜對了(稱為「bulls」, 公牛),有多少位屬於數字猜對了但是位置不對(稱為「cows」, 奶牛)。

3.朋友根據提示繼續猜,直到猜出秘密數字。

請寫出乙個根據秘密數字和朋友的猜測數返回提示的函式,返回字串的格式為 xayb ,x 和 y 都是數字,a 表示公牛,用 b 表示奶牛。

xa 表示有 x 位數字出現在秘密數字中,且位置都與秘密數字一致。

yb 表示有 y 位數字出現在秘密數字中,但位置與秘密數字不一致。

請注意秘密數字和朋友的猜測數都可能含有重複數字,每位數字只能統計一次。

輸入: secret = 「1807」, guess = 「7810」

輸出: 「1a3b」

解釋: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。

輸入: secret = 「1123」, guess = 「0111」

輸出: 「1a1b」

解釋: 朋友猜測數中的第乙個 1 是公牛,第二個或第三個 1 可被視為奶牛。

拿到題目,簡單了解後就會發現這種題無非類似於判斷兩個字串中是否存在相同的數字,只不過在此基礎上改變了遊戲規則以及輸出的條件,所以可以用到雜湊表來做。

根據示例中的輸出結果來看,

字母「a」前面的數字即表示在給出的秘密和猜測中對應位置上數字相同的個數,這個比較好處理,直接一起遍歷一遍這兩個字串相同的時候加1,在最後輸出時即為該計數的數字。

字母「b」前面的數字表示在兩個字串中都出現,但對應位置不相同的個數,這裡需要用到雜湊表。可以以乙個字串為模板,這裡就以密碼secret為模板,首先將字串轉化為數字,之後再將每個數字加到雜湊表中,對應的值存在乙個就加1,比如secret = 「1123」中,遍歷第乙個數字時,hash[1] = 1,遍歷第二個數字時,hash[1] += 1,所以hash[1] = 2,表示1在字串**現過兩次。然後再遍歷guess這個字串,將出現的每個數字在雜湊表中減去一,最後判斷該雜湊表中有多少大於0的數(注意這裡不能僅僅滿足等於0就行,因為奶牛的含義是guess字串出現在secret字串中,如果小於0,則表示對應guess字串中的數字沒出現在secret中),最後注意將所有的字串的長度還要減去前面字母a中的數字即可。

class

solution

; int n = secret.

length()

;for

(int i =

0; i < n; i++)}

int ans =0;

for(int i =

0; i <

10; i++

) num2 = n - num1 - ans;

str =

to_string

(num1)

+"a"

+to_string

(num2)

+"b"

;return str;}}

;

299 猜數字遊戲

你正在和你的朋友玩 猜數字 bulls and cows 遊戲 你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了 稱為 bulls 公牛 有多少位數字猜對了但是位置不對 稱為 cows 奶牛 你的朋友將會根據提示繼續猜,直到猜出秘密數字。請寫出乙個根據秘...

299 猜數字遊戲

你正在和你的朋友玩 猜數字 bulls and cows 遊戲 你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了 稱為 bulls 公牛 有多少位數字猜對了但是位置不對 稱為 cows 奶牛 你的朋友將會根據提示繼續猜,直到猜出秘密數字。請寫出乙個根據秘...

299 猜數字遊戲

你正在和你的朋友玩 猜數字 bulls and cows 遊戲 你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了 稱為 bulls 公牛 有多少位數字猜對了但是位置不對 稱為 cows 奶牛 你的朋友將會根據提示繼續猜,直到猜出秘密數字。請寫出乙個根據秘...