299. Bulls and Cows

一、题目

  1、审题

  

  2、分析

    两个字符串数字中,位置相同且数字相同则 bull++;位置不同但数字相同则 cow++;统计 bull、cow 个数。

 

二、解答

  1、思路

    采用两个整形数组,num1[10], num2[10]; 

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

    若字符相同 则 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";
        
    }

 

  方法二、

    ①、采用一个额外数组:  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";
    }

 

    

 

转载于:https://www.cnblogs.com/skillking/p/10020651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值