算法思想一:迭代
解题思路:
由题可知,每天的蛋糕数量等于前一天蛋糕数量去除三分之一再加一个;反过来,每天的蛋糕数量等于后一天数量加1的 3/2 倍计算
因此可以采用迭代从n-1天到第一天的蛋糕数量
图解:
| 步骤 | n | 计算 | 蛋糕数量 |
| 1 | 4 | | 1 |
| 2 | 3 | (1+1)*3/2 | 3 |
| 3 | 2 | (3+1)*3/2 | 6 |
| 4 | 1 | (6+1)*3/2 | 10 |
代码展示:
JAVA版本
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型 只剩下一只蛋糕的时候是在第n天发生的.
* @return int整型
*/
public int cakeNumber (int n) {
// write code here
int x = 1;
// 迭代计算n-1天到第1天蛋糕数量
for (int i = 0; i < n-1; i++){
// 每一天由后一天的+1 的3/2倍得来
x = (x+1)*3/2;
}
return x;
}
} 复杂度分析
时间复杂度
:迭代计算时间
空间复杂度O(1):仅使用常数级变量空间
算法思想二:递归
解题思路:
由方法一可知:每天的蛋糕数量等于后一天数量加1的 3/2 倍计算 因此可以采用递归计算的方式来计算每天的蛋糕数量
1、特殊情况:当n == 1直接返回1
2、递归返回
代码展示:
Python版本
class Solution: def cakeNumber(self , n ): # write code here if n == 1: return 1 # 递归计算前一天的蛋糕数量 return (self.cakeNumber(n-1) + 1) * 3 / 2
复杂度分析
时间复杂度
:递归时间
空间复杂度
:递归栈占用时间



京公网安备 11010502036488号