雜湊表 猜數字遊戲

2021-10-04 02:23:42 字數 1762 閱讀 9413

299題猜數字

你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了,用a表示,有多少位數字猜對了但是位置不對,用b表示。你的朋友將會根據提示繼續猜,直到猜出秘密數字。

請注意秘密數字和朋友的猜測數都可能含有重複數字

示例 1:

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

輸出: 「1a3b」

----------------------------------手動切割---------------------------------------

在之前一篇「26字母陣列解決單詞拼寫」的部落格裡我們用了乙個26字母的陣列存放字母表,同理,我們也可以使用乙個表示10個數字的數字表存放「0123456789」這是個數字,記錄每個數字的出現次數和位置。

int tmp=new int[10];
我們需要記錄兩個資料:

a:滿足:數字存在+位置對應

b:滿足:數字存在+位置不對應

secret:1 8 0 7

guess: 7 8 1 0

依次對比: 下標

0123

4567

89tmp1

-1

secret:1 8 0 7

guess: 7 8 1 0

⬆兩個8數字相等位置對應。a=1 陣列無需改動。

下標01

2345

6789

tmp1

-1

secret:1 8 0 7

guess: 7 8 1 0

⬆0和1不相等:

tmp[0]++;

tmp[1]--;

下標01

2345

6789

tmp10-1

secret:1 8 0 7

guess: 7 8 1 0

⬆7和0不相等:

tmp[7]++;

tmp[0]--;

下標01

2345

6789

tmp000

最後遍歷tmp陣列:

如果存在》0的數,表示secret中有的數字沒有被猜到,

如果存在=0的數,表示secret中的數字都被猜到了(無論位置),或者secret和guess都沒提到的數

如果存在<0的數,表示guess猜的數字在secret中不存在。

我們記錄的資料:

a:數字存在+位置對應,直接返回a

b:數字存在+位置不對應

b=secret的長度-猜對的數字-沒有猜對的數字(tmp中》0的數)

這個例子很簡單,下面這個例子可以更好的看出來,有空試試。

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

輸出: 「1a1b」

public

static string gethint

(string secret, string guess)

}int sum=0;

for(

int i=

0;i) b=s.length-a-sum;

return a+

"a"+b+

"b";

}

,°:.( ̄▽ ̄)/:.° 。

雜湊解題 leetcode299猜數字遊戲

這一題如果用hash做非常容易,時間複雜度為o n 你正在和你的朋友玩 猜數字 bulls and cows 遊戲 你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了 稱為 bulls 公牛 有多少位數字猜對了但是位置不對 稱為 cows 奶牛 你的朋友將...

猜數字遊戲

問題描述 猜數字遊戲 隨機出乙個兩位數,然後讓你猜,直到猜對為止。猜對後可以提示選擇是否再玩一次。include include using namespace std int main srand unsigned int time null int num rand 90 10 隨機出乙個兩位數...

猜數字遊戲

author 徐權 data 2015728 function 猜數字遊戲 實用平台 vs2012及以上 如果要移植到其他平台scanf s和puts s 應改為scanf和puts即可 include include include include define n 5 定義陣列大小,從而決定猜的...