Tag: 趣题

模拟算法解决小时候的疑问: 空瓶子换啤酒问题

记得小时候一直在琢磨的问题, 拿空酒瓶(也有可能是可乐)换酒瓶, 最后面一共可以喝几瓶. 今天在 leetcode 看到了这题, 1518. 这题是简单题, 我们通过模拟就能解决. 需要的定义的变量就是总喝的瓶数, 还有就是当前空瓶数. 只要空瓶子够换新酒瓶, 我们就不停的循环这个过程. 需要注意的是新的空瓶数得把原来不够换的那部分也加上. 比如3个空瓶可以换一个新瓶, 现在有5个空瓶, 只够换1个, 然后新的空瓶就是(5-3+1=3)还够换1瓶. 不啰嗦了, 以下就是 Python代码. class Solution: def numWaterBottles(self, numBottles: int, numExchange: int) …

做题送美人 Python 题解: (两质数相乘等于 707829217)

上个月去北爱游玩, 看朋友圈传这个, 一直拖延至今天才有点时间写写题解: 后来了解到, 这个是HR的套路, 并不是真的做题送美人, 不过这题还是挺有意思的, 至少能复习一下素数的一些相关算法. 暴力穷举 题目要求是两质数相乘 等于 707829217, 这数也不大, 至少不需要用于大整数 bignum, 2的31次方是: 2147483648. 因此我们可以从3开始暴力, 每次加2, 直到 根号(707829217)=26605即可, 这数很小, 现在的计算机秒秒就出结果了. 算到根号就可以了, 因为暴力小的数, 大的数自然可以用707829217一除即可. 然后我们分别判断一下是否是质数即可. 质数判断从2到 根号, …

从A到B再到C有多少种方法?

有这么一题, 一个人从A到C, 一定要经过B, 并且每次走一步向东或者向北, 不能回头, 问一共有多少不同的方法. 暴力搜索(穷举) 理论上说, 你可以用暴力列举所有从A到C的走法 然后再一一比较是否经过B, 不过这种方法很低效因为需要列举出所有走法. 如果水平有X步垂直有Y步那么一共的方案有: or 可以这么理解, 一共有 x+y 步 选其中 x 或者 y 步来往东或者往北走. 纯数学方法: 排列组合 细想一下, 我们只要分两个阶段即可: 第一个阶段计算由A到B的方法数, 第二个阶段计算由B到C的方法数, 然后这么一乘就是最后的方案数了. …