j

jaryue

V1

2023/03/21阅读:9主题:默认主题

leecode292nim游戏

leecode

题目描述

你和你的朋友,两个人一起玩 Nim 游戏:

桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。

示例 1:

输入:n = 4 输出:false 解释:以下是可能的结果:

  1. 移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友赢了。
  2. 移除2个石子。你的朋友移走2块石头,包括最后一块。你的朋友赢了。 3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。 在所有结果中,你的朋友是赢家。 示例 2:

输入:n = 1 输出:true 示例 3:

输入:n = 2 输出:true

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/nim-game 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

法1

理解题意
玩家可以拿1-3个,就是说当有4个石头的时候,无论玩家拿几个,都有剩余的,而对面玩家可以一次性将剩余的石头拿完赢得比赛,就是说在比赛途中,一直将剩余石头==4的倍数给到对面,而对面拿多少个,你就拿4-多少个,这样到对面玩家拿的时候一定是4个,而你就一定是赢家,这样的方法也可用于对面,也就是当开局玩家拿到4的倍数个石头就一定会输掉游戏(理想情况下),其他就可以赢得游戏.

//判断4的倍数
    if n%4==0{return false}
    return true

执行结果

法1

//判断4的倍数
func canWinNim(n int) bool {
    if n%4==0{return false}
    return true
}

执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 1.8 MB , 在所有 Go 提交中击败了 82.70% 的用户 通过测试用例: 60 / 60 炫耀一下:

优化

func canWinNim(n int) bool {
    return n%4!=0
}

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1