题目链接: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];
}
}
}

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

被折叠的 条评论
为什么被折叠?



