众所周知,牛妹非常喜欢吃蛋糕。
第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整)多一个,到第n天准备吃的时候只剩下一个蛋糕。
牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?
有可能出现多解,返回任意一种可能的结果即可。
2
3
4
10
0
class Solution: def cakeNumber(self , n ): # n =0 时直接返回 if n == 0: return None dp = [0] * n dp[0] = 1 for i in range(1,len(dp)): #获取前一天蛋糕数量的取值范围 max = int(1.5*(dp[i-1] + 2)) min = int(1.5*(dp[i-1] + 1)) #遍历范围,然后找出正确的数量 for j in range(min,max): if j - j // 3 - 1 == dp[i-1]: dp[i] = j return dp[n-1]
# # # @param n int整型 只剩下一只蛋糕的时候是在第n天发生的. # @return int整型 # class Solution: def cakeNumber(self , n ): dp=[0 for _ in range(n)] if(n<1): return 0 else: dp[n-1]=1 for i in range(n-2,-1,-1): dp[i]=3*(dp[i+1]+1)//2 return dp[0]
import math class Solution: def cakeNumber(self , n ): # write code here result =1 for i in range(n-1): result = math.floor((result+1)*3/2) return result
/* 从第n天开始回推,d(n-1) = (d(n)+1)*3/2 特别注意,要先乘3再除2,则符合整形取余后的结果 */ class Solution { public: /** * * @param n int整型 只剩下一只蛋糕的时候是在第n天发生的. * @return int整型 */ int cakeNumber(int n) { // write code here if(n == 1) { return 1; } int i; int tmp = 1; for(i = 2; i <= n; i++) { tmp = (tmp + 1)*3/2; } return tmp; } };
int cakeNumber(int n) { int res = 1; while(--n) res = 3 * (res + 1) / 2; return res; }
class Solution: def cakeNumber(self , n ): # write code here # 每次加1为当前的2/3 cur = 1 while n - 1: cur += 1 if not cur & 1: cur = cur // 2 * 3 else: cur = (cur - 1) // 2 * 3 + 1 n -= 1 return cur
# # # @param n int整型 只剩下一只蛋糕的时候是在第n天发生的. # @return int整型 # class Solution: def cakeNumber(self , n ): # f(x)=f(x-1)+1/3*f(x-1)-1=2/3*f(x-1)-1 # f(1) = 1 # f(2) = 3 # f(n) = (f(n-1)+1)*3/2 f=[0 for i in range(n+1)] f[0] = 0 f[1] = 1 for i in range(2,n+1): f[i] = int(f[i-1]+1)*3/2 return f[n]