本系列(将)包含《程序员的算法趣题》(增井敏克著,绝云译)中所有问题的详细分析和Python解答。原书使用Ruby/Javascript实现,看不懂(😓)。较复杂的问题的解说也受限于书的篇幅以及不同的人的思维模式的不同,不容易跟得上书中的解说。归根结底还是以独立自主完全想清楚写出可行代码并验证通过才能达成最好的学习效果,在此过程中所走的所有弯路所陷入的坑都可以转变为经验教训。即便有时候算法不够好运行效率不够高也无妨,因为真正属于自己的思考结果才是最重要的。
2023-03-07:将全部代码和解题笔记上传github: GitHub - chenxy3791/algorithm_puzzles
2021-11-17 终于完成了最后一道题Q56的代码题解,虽然还留下了疑问。暂且就算是这本书的第一轮学习练习的封顶吧。不是很完美,但是我已经尽力了。这可能是我学习生涯中屈指可数的完整的能从头啃到尾的习题类的书了。在终日奔忙谋生之余能坚持做到这一点应该是不容易的,为自己点个👍!
留下了很多问题,所以后面还会时不时地回来更新优化现有题解或者追加新的题解。
2021-11-12 终于发布了一道新的题解,上一道(Q57)完整的题解还是上个月发布的。惭愧,这第一轮的最后两道题竟然托了这么久。好了,距离这本书第一轮封顶还有最后一道(Q56:鬼脚图中的横线),加油,old boy!
2021-11-05 卡了好多天没有发布新的题解了。最后还剩Q56"鬼脚图中的横线"和Q62”日历中的最大矩形“两道题没有给出初始解。Q56想了好多天(当然只是断断续续的毕竟还要干活赚钱糊口^-^)没有什么头绪。暂时先发布一个初步思路。。。
2021-10-21 Q61. 基本方案,运算效率无比之低。进入高级篇后的几道题目基本如此。不过,没关系。这个层次要求更高一级的技能,需要时间磨砺。一般来说,但凡我能有一个哪怕最naive的解,我尽量避免看原书题解。要等我觉得关于这个问题已经想无可想的时候才去看原书题解。反正也不赶时间,只是利用闲暇时刻想一想(脑袋里可能并行地放了多个问题,没事的时候就翻出来想一想,所以也不浪费时间)。真正独立想出解决方案来才能有最大收获,这个也算是物尽其用吧,毕竟碰到一个好问题的机会难得--要尽量做到一菜多吃^-^
2021-10-20 搞定Q66. 高级篇竟然有点倒着做过来的感觉,不是有意为之。我一般先读一遍题目(不看原书提示和解答),如果5到10分钟内还没有什么头绪,就转向下一道题,碰到似曾相似或者有头绪觉得有可能搞定的先动手,然后就成了这样一个顺序。。。向前面Q56那种鬼脚图为题材的题目完全摸不着头脑,只能先在脑袋里存放一下。
2021-10-17 又轻松搞定一道高级篇(Q67). 跳过了前面一些题目先做这道,是因为浏览了一下“高级篇”中的题目,大多数题目想2~3分钟感觉没有头绪,先捏这种一看就觉得“顺眼”的软柿子捏一捏^-^。这种策略对于学习很重要,盲目地死磕一道题目花费太久时间容易产生挫折感从而打击学习的积极性。有些问题一时没有头绪,放在脑袋里供闲暇时间想一想说不定更容易突然就有什么灵感。。。
2021-10-16 完成第一道高级篇(Q59),与前面的Q32相似(算式Q32的增强版),轻车熟路,算式捡了个软柿子^-^
2021-10-15 终于做完了第3章(中级篇),虽然还欠了很多债(有些题解还有错待纠正)。。。接下来第4章是高级篇,估计更加困难重重。。。加油💪!凭谁问,廉颇老矣尚能饭否?!
2021-10-08 长假归来。。。Q48轻松搞定。呃,那一定是我的水平涨了嘛^-^老兵不死他只是慢慢凋零。。。
2021-09-24 今天新追加的Q38,coding-->运行,一次性PASS,感觉有点飘了^-^
2021-09-17 不知不觉已经做了差不多一半了。不过,这本书的编排是先易后难,所以从数量上做完了前半,从内容上可能还不到三分之一吧。加油💪!凭谁问,廉颇老矣尚能饭否?!
Q01: 回文数 暴力搜索,字符串处理
Q02: 四则运算组合游戏 算式的评估,中序表示法 vs 逆波兰表示法
Q03: 翻牌 初等数论趣题
Q04: 切分木棒 组合计数问题的闭式解
Q05: 硬币兑换 动态规划,递归
Q07: 日期的二进制转换 datetime, 字符串处理
Q14: 国名接龙 深度优先路径搜索
Q18: 水果酥饼日 深度优先路径搜索
Q19: 朋友的朋友还是朋友吗 初等数论趣题
Q20: 受难立面魔方阵 动态规划
Q23: 二十一点通吃 深度优先路径搜索,动态规划
Q24: 完美的三振出局 深度优先路径搜索
Q25: 时髦的鞋带系法 深度优先路径搜索
Q26: 高效的立体停车场 广度优先搜索
Q28: 社团活动的最优分配方案 递归+memo, 动态规划
Q31: 计算最短路径 深度优先搜索
Q35: 0和7的回文数 逆向思考
Q36: 翻转骰子 有限状态机,鸽笼原则
Q37: 翻转7段码(1) 暴力(全量)搜索
Q38: 填充白色 逆向思考,最长路径问题,广度优先搜索
Q41: 用1个数表达1234 暴力搜索
Q44: 质数矩阵 质数判定
Q45: 排序交换次数的最少化 广度优先搜索
Q46: 唯一的OX序列 暴力搜索
Q48: 翻转得到交错排列 广度优先搜索
Q49: 欲速则不达 深度优先搜索
Q52: 糖果恶作剧 动态规划,递归,回溯
Q53: 同数包夹 深度优先路径遍历搜索
Q54: 偷懒的算盘 暴力破解
Q54: 偷懒的算盘(2) 动态规划, 递归+Memoization
Q55: 平分蛋糕 动态规划, 递归+Memoization
Q57: 最快的联络网 最短距离问题,广度优先搜索
Q58: 丢手绢游戏中的总移动距离 最短距离问题,广度优先搜索
Q59: 合并单元格的方式 深度优先,递归
Q61: 不交叉一笔画下去 深度优先路径遍历
Q63: 迷宫会合 Reachability, 广度优先搜索
Q66: 设计填字游戏 深度优先,递归,连通性
Q67: 不挨着坐是一种礼节吗? 动态规划, 递归+Memoization
Q68: 异性相邻的座位安排 深度优先,递归
Q69: 蓝白歌会(1) 最大距离问题,广度优先搜索,需要速度优化