<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)299:猜數(shù)字游戲

          共 3911字,需瀏覽 8分鐘

           ·

          2021-06-23 20:55

          算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問(wèn)題叫做 猜數(shù)字游戲,我們先來(lái)看題面:
          https://leetcode-cn.com/problems/bulls-and-cows/




          你在和朋友一起玩 猜數(shù)字(Bulls and Cows)游戲,該游戲規(guī)則如下:

          • 你寫(xiě)出一個(gè)秘密數(shù)字,并請(qǐng)朋友猜這個(gè)數(shù)字是多少。

          • 朋友每猜測(cè)一次,你就會(huì)給他一個(gè)提示,告訴他的猜測(cè)數(shù)字中有多少位屬于數(shù)字和確切位置都猜對(duì)了(稱(chēng)為“Bulls”, 公牛),有多少位屬于數(shù)字猜對(duì)了但是位置不對(duì)(稱(chēng)為“Cows”, 奶牛)。



          • 朋友根據(jù)提示繼續(xù)猜,直到猜出秘密數(shù)字。


          請(qǐng)寫(xiě)出一個(gè)根據(jù)秘密數(shù)字和朋友的猜測(cè)數(shù)返回提示的函數(shù),返回字符串的格式為 xAyB ,x 和 y 都是數(shù)字,A 表示公牛,用 B 表示奶牛。

          • xA 表示有 x 位數(shù)字出現(xiàn)在秘密數(shù)字中,且位置都與秘密數(shù)字一致。

          • yB 表示有 y 位數(shù)字出現(xiàn)在秘密數(shù)字中,但位置與秘密數(shù)字不一致。




          請(qǐng)注意秘密數(shù)字和朋友的猜測(cè)數(shù)都可能含有重復(fù)數(shù)字,每位數(shù)字只能統(tǒng)計(jì)一次。

          示例


          示例 1:

          輸入: secret = "1807", guess = "7810"
          輸出: "1A3B"
          解釋: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7


          示例 2:

          輸入: secret = "1123", guess = "0111"
          輸出: "1A1B"
          解釋: 朋友猜測(cè)數(shù)中的第一個(gè) 1 是公牛,第二個(gè)或第三個(gè) 1 可被視為奶牛。


          解題

          https://www.cnblogs.com/hi-yxiao/p/14438402.html

          把兩個(gè)字符串轉(zhuǎn)化為字符串?dāng)?shù)組,并新建一個(gè)數(shù)組arrNumber,數(shù)組下標(biāo)代表出現(xiàn)的數(shù)字,數(shù)組值表示出現(xiàn)的次數(shù)。
          第一遍遍歷時(shí),判斷相同下標(biāo)時(shí)數(shù)字是否相同找公牛,遍歷時(shí)記錄secret中出現(xiàn)的數(shù)字,在數(shù)組arrNumber中記錄數(shù)字number出現(xiàn)的次數(shù)++。
          第二遍遍歷時(shí),找到兩個(gè)字符串中的重復(fù)數(shù)字(公牛+奶牛)。

          arrNumber[number] > 0代表guess中該number在secret中對(duì)應(yīng)有多個(gè),找到一個(gè)減一個(gè)直至arrNumber[number] == 0。 再減去公牛值即得到奶牛值。


          class Solution {
              public String getHint(String secret, String guess) {
                  char[] arrSecret = secret.toCharArray(); //把secret字符串轉(zhuǎn)化為arrSecret字符串?dāng)?shù)組
                  char[] arrGuess = guess.toCharArray(); //把secret字符串轉(zhuǎn)化為arrGuess字符串?dāng)?shù)組
                  int[] arrNumber = new int[10]; //數(shù)組下標(biāo)代表出現(xiàn)的數(shù),數(shù)組值表示出現(xiàn)的次數(shù)
                  int n = secret.length();
                  int number = -1;
                  int x = 0, y = 0; //x表示公牛數(shù)量,y表示奶牛數(shù)量
                  for (int i = 0; i < n; i++){ //第一遍遍歷找公牛
                      if (arrSecret[i] == arrGuess[i]){ //判斷公牛條件
                          x++;
                      }
                      number = Integer.parseInt(String.valueOf(arrSecret[i])); //將char型值轉(zhuǎn)換為int類(lèi)型
                      arrNumber[number]++; //數(shù)字number出現(xiàn)次數(shù)++
                  }
                  for (int i = 0; i < n; i++){ //第二遍遍歷找字符串中的重復(fù)值(公牛+奶牛)
                      number = Integer.parseInt(String.valueOf(arrGuess[i]));
                      if (arrNumber[number] > 0){ // >0代表secret中該number有多個(gè),找到一個(gè)減一個(gè)
                          arrNumber[number]--;
                          y++; //公牛+奶牛
                      }
                  }
                  y = y-x; //奶牛

                  return x + "A" + y + "B";
              }
          }


          好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:
          LeetCode1-280題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)281:鋸齒迭代器
          LeetCode刷題實(shí)戰(zhàn)282:給表達(dá)式添加運(yùn)算符
          LeetCode刷題實(shí)戰(zhàn)283:移動(dòng)零
          LeetCode刷題實(shí)戰(zhàn)284:頂端迭代器
          LeetCode刷題實(shí)戰(zhàn)285:二叉搜索樹(shù)中的順序后繼
          LeetCode刷題實(shí)戰(zhàn)286:墻和門(mén)
          LeetCode刷題實(shí)戰(zhàn)287:尋找重復(fù)數(shù)
          LeetCode刷題實(shí)戰(zhàn)288:?jiǎn)卧~的唯一縮寫(xiě)
          LeetCode刷題實(shí)戰(zhàn)289:生命游戲
          LeetCode刷題實(shí)戰(zhàn)290:?jiǎn)卧~規(guī)律
          LeetCode刷題實(shí)戰(zhàn)291:?jiǎn)卧~規(guī)律II
          LeetCode刷題實(shí)戰(zhàn)292:Nim 游戲
          LeetCode刷題實(shí)戰(zhàn)293:翻轉(zhuǎn)游戲
          LeetCode刷題實(shí)戰(zhàn)294:翻轉(zhuǎn)游戲II
          LeetCode刷題實(shí)戰(zhàn)295:數(shù)據(jù)流的中位數(shù)
          LeetCode刷題實(shí)戰(zhàn)296:最佳的碰頭地點(diǎn)
          LeetCode刷題實(shí)戰(zhàn)297:二叉樹(shù)的序列化與反序列化
          LeetCode刷題實(shí)戰(zhàn)298:二叉樹(shù)最長(zhǎng)連續(xù)序列

          瀏覽 84
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  98国产精品 | 日韩熟女一区二区 | 99免费视频在线观看 | 激情肏逼网 | 97人妻人人澡人人 |