2022.01.20 - 214.石子游戏 IX

258 篇文章 0 订阅

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 思路

(1) 博弈论

  • 只需将石子分成三类即可,即除3余0、1、2的石子,每次累加的和也都对3取余。
  • 若和为0,则游戏直接结束,因此,在游戏结束前,和要么为1,要么为2。
  • 游戏结束前,当取出与和相等的石子时,和会在1和2之间互换;当取出余0的石子时,等于交换了一次先后手的顺序;当取出与和不等的石子时,则游戏结束。
  • 若余0的石子个数是偶数,则先后手顺序不变,而A必然要先取一个1或者2且取完还有剩的才能保证自己是必胜的。
  • 若余0的石子个数是奇数,则相当于B先手,只有当1和2的个数差大于2才能保证A必胜。

3. 代码

public class Test {
    public static void main(String[] args) {
    }
}

class Solution {
    public boolean stoneGameIX(int[] stones) {
        int[] count = new int[3];
        for (int stone : stones) {
            count[stone % 3]++;
        }
        if ((count[0] & 1) == 0) {
            return count[1] >= 1 && count[2] >= 1;
        }
        return Math.abs(count[1] - count[2]) > 2;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值