LeetCode 1553.吃掉N个橘子的最少天数

本文探讨了在LeetCode上的1553题——吃掉N个橘子的最少天数。介绍了如何通过记忆化搜索策略,利用递归算法找到吃橘子的最短路径。在面对大量橘子的情况下,该算法能够高效地找到解决方案。

题目链接:LeetCode 1553.吃掉N个橘子的最少天数

题意:

  厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:

吃掉一个橘子。
如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。
如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。
每天你只能从以上 3 种方案中选择一种方案。

请你返回吃掉所有 n 个橘子的最少天数

 

解题思路:

   从别人那里学到的记忆化搜索(本来以为是DP,看了数据觉得是贪心....)

能除3就除3,能除2就除2,不行减一,取最小值

class Solution {

    /**
     * @param Integer $n
     * @return Integer
     */
    public  $a = array();
    function minDays($n) {
        return $this->get($n);
    }
    function get($n){
        //echo "n = ".$n."\n";
        if($n == 1){
            return 1;
        } elseif ($n <= 3){
            return 2;
        } elseif(array_key_exists($n, $this->a)){  // 此处这样用的原因是为后一次的get减少次数
            return $this->a[$n];
        } else{
            $this->a[$n] = min($this->get(intval($n/2) )+ $n % 2 + 1, $this->get(intval($n/3) )+ $n % 3 + 1);
            return $this->a[$n];
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值