299. Bulls and Cows

1、題目數組

  一、審題spa

  

  二、分析3d

    兩個字符串數字中,位置相同且數字相同則 bull++;位置不一樣但數字相同則 cow++;統計 bull、cow 個數。code

 

2、解答blog

  一、思路字符串

    採用兩個整形數組,num1[10], num2[10]; get

    遍歷 secret、guess 相同位置的字符。class

    若字符相同 則 bull ++ ;若字符不一樣,則將 secret 中改字符對應的數字做爲下標在 num1 中 + 1, guess 字符在 num2中數值 +1。循環

    最終循環統計出 num1 與 num2 位置相同數值最小的全部元素的和,即爲 cow 的個數。遍歷

    public String getHint2(String secret, String guess) {
        int bulls = 0, cows = 0;
        int[] numbers1 = new int[10];
        int[] numbers2 = new int[10];
        for (int i = 0; i < secret.length(); i++) {
            char ch1 = secret.charAt(i);
            char ch2 = guess.charAt(i);
            if(ch1 == ch2)
                bulls++;
            else {
                numbers1[ch1 - '0']++;
                numbers2[ch2 - '0']++;
            }
        }
        
        for (int i = 0; i < 10; i++) 
            cows += Math.min(numbers1[i], numbers2[i]);
        
        return bulls + "A" + cows + "B";
        
    }

 

  方法2、

    ①、採用一個額外數組:  numbers[10]

    ②、secret 與 guess 字符相同則 bull ++ ;

    ③、不然,secret 對應字符數字做爲下標在 numbers 查找,若值 value < 0,則 cow++ ; value++;

      guess 對應數字在numbers 中的 value 若是 > 0, 則 cow++;value--。

    public String getHint(String secret, String guess) {
        int bulls = 0, cows = 0;
        int[] numbers = new int[10];
        
        for (int i = 0; i < secret.length(); i++) {
            char ch1 = secret.charAt(i);
            char ch2 = guess.charAt(i);
            if(ch1 == ch2)
                bulls++;
            else {
                if(numbers[ch1 - '0']++ < 0) cows++;
                if(numbers[ch2 - '0']-- > 0) cows++;
            }
        }
        return bulls + "A" + cows + "B";
    }
相關文章
相關標籤/搜索