【力扣】1553. 吃掉 N 个橘子的最少天数

1、题目描述
厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:
吃掉一个橘子。
如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。
如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。
每天你只能从以上 3 种方案中选择一种方案。
请你返回吃掉所有 n 个橘子的最少天数。

示例 1:
输入:n = 10
输出:4
解释:你总共有 10 个橘子。
第 1 天:吃 1 个橘子,剩余橘子数 10 - 1 = 9。
第 2 天:吃 6 个橘子,剩余橘子数 9 - 2*(9/3) = 9 - 6 = 3。(9 可以被 3 整除)
第 3 天:吃 2 个橘子,剩余橘子数 3 - 2*(3/3) = 3 - 2 = 1。
第 4 天:吃掉最后 1 个橘子,剩余橘子数 1 - 1 = 0。
你需要至少 4 天吃掉 10 个橘子。

提示:
1 <= n <= 2*10^9

class Solution:@lru_cache(None) # 多一行懒人装饰符def minDays(self, n: int) -> int:if n==0:return 0if n==1:return 1return 1+min(self.minDays(n//2)+n%2, self.minDays(n//3)+n%3)
class Solution:def minDays(self, n: int) -> int:visited = {}if n<=1:return n def search(n):nonlocal visited if n in visited:return visited[n]if n<=1:return n branch1 = n # 一个个吃branch2 = search(n//2)+ n%2 + 1 # 一个个吃到2的整数倍branch3 = search(n//3)+ n%3 + 1 # 一个个吃到3的整数倍visited[n] = min(branch1,branch2,branch3)return visited[n]return search(n)

字节实习笔试题
有一个文本编辑器,初始状态内容为空,请你计算把编辑器中的内容变成N个相同字符串s最少需要多少时间,只能通过以下三种操作编辑文本:

把现有的文本倍增,要用A个单位时间(假设A固定,与现有的文本长度无关)
在末尾添加一个s,要用B个单位时间
在末尾删除一个s,要用B个单位时间

def dfs1(n):#可以优化成有记忆的,如本题if n == 0:return 0if n == 1:return 1# 从(n-1)//2 增倍,再一步步加到n (n为偶数时branch1,branch4相同)branch1 = dfs1(n//2)+a+b*(n % 2)branch2 = b*n  # 一步步加到nbranch3 = dfs1(n//2)+b * (n-n//2)  # 从n//2 一步步加到nbranch4 = dfs1((n+1)//2)+a+b*(n % 2)  # 从(n+1)//2 增倍,再一步步减到nres = min(branch1, branch2, branch3, branch4)return res

Leetcode1553. 吃掉 N 个橘子的最少天数相关推荐

  1. leetcode1553. 吃掉 N 个橘子的最少天数(Python3、c++)

    文章目录 leetcode1553. 吃掉 N 个橘子的最少天数 方法:递归+记忆化 思路: 代码: Python3: cpp: 结果: leetcode1553. 吃掉 N 个橘子的最少天数 厨房里 ...

  2. 力扣 1553. 吃掉 N 个橘子的最少天数 记忆化DFS|记忆化BFS|剪枝

    吃掉 N 个橘子的最少天数 厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子. 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子. 如果剩余橘子数 n ...

  3. LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)

    文章目录 1. 题目 2. 解题 1. 题目 厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子. 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子. ...

  4. LeetCode 1568. 使陆地分离的最少天数(DFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid ,其中 0 表示水,而 1 表示陆地. 岛屿由水平方向或竖直方向上相邻的 1 (陆地)连接形成. 如 ...

  5. leetode题库5438--制作 m 束花所需的最少天数

    5438. 制作 m 束花所需的最少天数 给你一个整数数组 bloomDay,以及两个整数 m 和 k . 现需要制作 m 束花.制作花束时,需要使用花园中 相邻的 k 朵花 . 花园中有 n 朵花, ...

  6. Leetcode_1482.制作m束花所需的最少天数

    给你一个整数数组 bloomDay,以及两个整数 m 和 k . 现需要制作 m 束花.制作花束时,需要使用花园中 相邻的 k 朵花 . 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] ...

  7. leetcode1568. 使陆地分离的最少天数(Python3、c++)

    文章目录 leetcode1568. 使陆地分离的最少天数 方法:并查集 思路: 并查集: 求割点: 代码: Python3: cpp: 结果: leetcode1568. 使陆地分离的最少天数 给你 ...

  8. Leetcode 1482题 制作 m 束花所需的最少天数

    Leetcode 1482题 制作 m 束花所需的最少天数 链接: 制作 m 束花所需的最少天数. 提交结果: 解题思路 本题主要采用二分查找的解题思路,范围为0到天数最大值,根据是否能组成相应数量的 ...

  9. 周末加餐 使陆地分离的最少天数

    给你一个由若干 0 和 1 组成的二维网格 grid ,其中 0 表示水,而 1 表示陆地.岛屿由水平方向或竖直方向上相邻的 1(陆地)连接形成. 如果恰好只有一座岛屿 ,则认为陆地是连通的 :否则, ...

最新文章

  1. TSM备份Windows数据
  2. 解决CSV文件中长数字以科学记数格式保存问题
  3. LED数码管仿真显示程序
  4. Platform.Uno介绍
  5. jquery批量删除
  6. php-fpm 进程数和 cpu,关于PHP的 PHP-FPM进程CPU 100%的分析和解决
  7. java 手动加载数据库驱动_JAVA加载数据库驱动(JDBC)
  8. 每日英语:How Many People Really Use Sina Weibo
  9. php随机生成卡密,PHP随机生成不反复的8位卡号(数字)和卡密(字符串)_后端开发...
  10. java环境_Java 开发环境配置
  11. 计算机pc610台湾研华,IPC610-研华610工控机配置
  12. ORACLE_SID环境变量写错,因未设置系统环境变量ORACLE_SID导致ORA-12162错误
  13. 音频处理-2 WAV格式
  14. ssb门限_ssb单边带的产生方法
  15. 【任务二】打卡——by 003-Vamein
  16. 雨林木风诚聘Linux研发工程师
  17. 秒懂流媒体协议 RTMP 与 RTSP
  18. 【以太网数据结构】以太网头部
  19. 华为OD机试真题2023(JavaScript)
  20. JavaScript广告代码大全

热门文章

  1. C语言中易混淆的标识符,C语言指针中易混淆的概念
  2. Windows10下安装爬虫框架scrapy
  3. android sdk mac版本查看,如何查看 mac androidsdk版本
  4. SSM 企业权限管理系统 项目实战
  5. 坐拥上亿流量,星空华文能否在港股舞台上脱颖而出?
  6. 初试一结束,考研人怎么变成这个鬼样子?!
  7. 手写Promise和all、race等方法,附上原理解析
  8. Sailing-Rod Stewart
  9. Java多线程系列之“JUC集合“详解
  10. Espressif 玩转 High Resolution Timer