LeetCode - NimGame
2016-02-14 22:43
363 查看
开始刷算法题了,尽量一天一道。
这个题最初的意思是:
翻译成中文之后我们需要抽象这道题的意思,把它再翻译成数学语言。
最后我们得到的题意是:
验证4=>false
验证5=>true
验证6,7,8
然后我们就发现其实只要是能整除4的都是false,所以这道题就变成了如何判断一个数字是否能整除4。
一、分析
拿到一道题目,首先我们要冷静分析,千万不要一上来就直接搞代码,那样纯粹是浪费时间。偏偏这是我这种初级程序员最喜欢干的。这个题最初的意思是:
两个人拿石头,每一次只能拿1~3块石头,“我”先拿,最后拿的人胜利,且我和对手都是聪明且想赢的。
翻译成中文之后我们需要抽象这道题的意思,把它再翻译成数学语言。
两个人拿石头,其实就是
对一个数字做减法。
我先拿,其实就是
设定一个初始条件。
最后拿的人胜利,其实就是
判断拆分成奇数个还是偶数个。
都是聪明且都想赢,其实就是
尽可能的少拆分。
最后我们得到的题意是:
将一个数字拆分成由1~3组合的数字,判断拆分的个数。
二、然后就先举例子去试探规律
1=>true 2=>true 3=>true 4=>false 5=>true 6=>true 7=>true 8=>false . . .
验证4=>false
4=1+3 失败 4=2+2 失败 4=3+1 失败
验证5=>true
5=1+4 由于4是自己输,所以5一定是自己赢。 5=2+3 失败 5=3+2 失败 由于两个人都是聪明且想赢的,所以“我”一定会选择5=1+4从而获得胜利
验证6,7,8
6=1+5 6=2+4 6=3+3 由于4是必输,所以6可以通过6=2+4,转换成4,所以一定会胜利。 7=1+6 7=2+5 7=3+4 在这里我们就发现了,只要能转化成4的就可以获得胜利。因为4是原必输态,也就是现在的必胜态。 8=1+7 8=2+6 8=3+5 由于5,6,7都是必输的。
然后我们就发现其实只要是能整除4的都是false,所以这道题就变成了如何判断一个数字是否能整除4。
相关文章推荐
- 在GNU/Linux下使用Lilypond排版简谱
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面
- HihoCoder 1264 神奇字符串(暴力)
- Linux下mysql数据库的数据导入导出
- Java排序-快速排序
- Atitit.ioc 动态配置文件guice 设计原理
- 欢迎使用CSDN-markdown编辑器
- Atitit.ioc 动态配置文件guice 设计原理
- strlen()和sizeof()
- ip
- POJ 2096 概率DP
- Atitit.ioc 动态配置文件guice 设计原理
- Spring mvc动态文件下载
- 面试笔试杂项积累-leetcode 306-310
- SimpleAdapter用法代码 自己标的用法
- 《三体》三部曲
- mysql 创建用户与授权、修改密码
- dataTables分页页码缓存问题