题目链接:LeetCode 5490.吃掉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];}}
}