LeetCode 题解工作台

吃掉 N 个橘子的最少天数

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

category

2

题型

code_blocks

5

代码语言

hub

3

相关题

当前训练重点

困难 · 状态·转移·动态规划

bolt

答案摘要

根据题目描述,对于每个 ,我们可以选择三种方式之一: 1. 将 减少 ;

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 状态·转移·动态规划 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

厨房里总共有 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 个橘子。

示例 2:

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

示例 3:

输入:n = 1
输出:1

示例 4:

输入:n = 56
输出:6

 

提示:

  • 1 <= n <= 2*10^9
lightbulb

解题思路

方法一:记忆化搜索

根据题目描述,对于每个 nn,我们可以选择三种方式之一:

  1. nn 减少 11
  2. 如果 nn 能被 22 整除,将 nn 的值除以 22
  3. 如果 nn 能被 33 整除,将 nn 的值除以 33

因此,问题等价于求解通过上述三种方式,将 nn 减少到 00 的最少天数。

我们设计一个函数 dfs(n)dfs(n),表示将 nn 减少到 00 的最少天数。函数 dfs(n)dfs(n) 的执行过程如下:

  1. 如果 n<2n < 2,返回 nn
  2. 否则,我们可以先通过 nmod2n \bmod 2 次操作 11,将 nn 减少到 22 的倍数,然后执行操作 22,将 nn 减少到 n/2n/2;我们也可以先通过 nmod3n \bmod 3 次操作 11,将 nn 减少到 33 的倍数,然后执行操作 33,将 nn 减少到 n/3n/3。我们选择上述两种方式中最少的一种,即 1+min(nmod2+dfs(n/2),nmod3+dfs(n/3))1 + \min(n \bmod 2 + dfs(n/2), n \bmod 3 + dfs(n/3))

为了避免重复计算,我们使用记忆化搜索的方法,将已经计算过的 dfs(n)dfs(n) 的值存储在哈希表中。

时间复杂度 O(log2n)O(\log^2 n),空间复杂度 O(log2n)O(\log^2 n)

1
2
3
4
5
6
7
8
9
10
class Solution:
    def minDays(self, n: int) -> int:
        @cache
        def dfs(n: int) -> int:
            if n < 2:
                return n
            return 1 + min(n % 2 + dfs(n // 2), n % 3 + dfs(n // 3))

        return dfs(n)
speed

复杂度分析

指标
时间complexity depends on the approach, but memoization reduces redundant calculations. The space complexity is determined by the number of states stored in the memoization table, which is proportional to n in the worst case.
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Understand state transition and recursive problem-solving techniques.

  • question_mark

    Test for efficiency and correct handling of large inputs.

  • question_mark

    Evaluate the candidate's understanding of memoization in dynamic programming.

warning

常见陷阱

外企场景
  • error

    Incorrect base case handling could result in infinite recursion or incorrect results.

  • error

    Not implementing memoization leads to redundant computations, significantly affecting performance.

  • error

    For large n, failing to optimize recursion depth or memoization can lead to stack overflow or slow execution.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Modify the problem to allow for other divisibility conditions (e.g., divide by 4 or 5).

  • arrow_right_alt

    Alter the minimum action (e.g., allow eating multiple oranges each day).

  • arrow_right_alt

    Extend the problem to allow additional actions like skipping days.

help

常见问题

外企场景

吃掉 N 个橘子的最少天数题解:状态·转移·动态规划 | LeetCode #1553 困难