【LeetCode刷题记】鹅厂秋招题集(2)

= =拖延症真的没办法…本来打算周更的也变成了半月更…

顺利刷了20%了…可喜可贺可喜可贺…_(:з」∠)_
在这里插入图片描述

292. Nim游戏 (Nim Game)

  • 题目:你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。
    你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

  • 思路:
    其实本问题算是较为基础的尼姆博弈问题。由于了解不深…介绍一下我所知道的基础概念吧…
    (1)关于“必胜状态”与“必败状态”
      一个状态是 必败状态 当且仅当 它的所有后继都是必胜状态
      一个状态是 必胜状态 当且仅当 它至少有一个后继是必败状态
    (2)SG定理
      【目前还在看书研究…是的我又five了】
    (3)SG函数 通用解法
      首先介绍集合 S S S m e x ( ) mex() mex()函数: m e x ( S ) = 不 在 S 集 合 中 的 最 小 非 负 整 数 mex(S)=不在S集合中的最小非负整数 mex(S)=S  例如
    S 1 = { 1 , 2 , 3 , 4 } , m e x ( S 1 ) = 0   ; S 2 = { 0 , 1 , 3 , 4 } , m e x ( S 2 ) = 2   ; S 3 = { } . m e x ( S 3 ) = 0 S_1=\{1,2,3,4\} ,mex(S_1)=0\ ; \\ S_2=\{0,1,3,4\},mex(S_2)=2 \ ; \\ S_3=\{\}.mex(S_3)=0 S1={1,2,3,4},mex(S1)=0 ;S2={0,1,3,4},mex(S2)=2 ;S3={}.mex(S3)=0
      对于SG函数有:
    S G ( x ) = m e x ( S ) , 其 中 S 为 x 所 有 后 继 状 态 的 集 合 SG(x)=mex(S),其中S为x所有后继状态的集合 SG(x)=mex(S)Sx
      另有:
    S G ( x ) = 0    ⟺    x 为 必 败 状 态 SG(x) = 0 \iff x为必败状态 SG(x)=0x

(当然对于这个题,为了刷排名…可以找到判别式…因为这个题简单…其他尼姆博奕题目还是需要利用SG函数的解法【嘿嘿没想到吧.jpg】8说了,摸鱼摸鱼)

class Solution {
    public boolean canWinNim(int n) {
        return n%4!=0;
    }
}

[另一道利用SG函数解尼姆博弈的问题下次补充…]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值