LeetCode 1006. 笨阶乘
原题链接
中等
作者:
hairrrrr
,
2021-04-04 12:49:40
,
所有人可见
,
阅读 329
找规律
class Solution {
public:
int clumsy(int N)
{
// N * (N - 1) / (N - 2) + (N - 3) - (N - 4) * (N - 5) / (N - 6) ...
// N * (N - 1) / (N - 2) -> (N^2 - N) / N - 2 -> ((N - 2)^2 + 3N - 4) / N - 2 -> N - 2 + (3(N - 2) + 2 )/ N - 2
// N-2 + 3 + 2/N-2 -> N+1+2/N-2 因为是向下取整,对于N > 4 的数来说,该式等于 N+1
// 再来看第一行的式子
// N*(N-1)/(N-2) + (N-3) - (N-3) + (N - 7) - (N-7) ... 4 3 2 1
// %4==0 8*7/6 +5 -4*3/2+1
// %4==1 5 *4/3+2-1
// %4==2 6*5 /4+3-2*1
// %4==3 7*6/5 +4-3*2/1
// 恒等于 N+1
// %4==0 N*(N-1)/(N-2) ... -4*3/2+1 N+1
// %4==1 N*(N-1)/(N-2) ... *4/3+2-1 N+2
// %4==2 N*(N-1)/(N-2) ... /4+3-2*1 N+2
// %4==3 N*(N-1)/(N-2) ... +4-3*2/1 N-1
if(N == 1) return 1;
if(N == 2) return 2;
if(N == 3) return 6;
if(N == 4) return 7;
if(N % 4 == 0) return N + 1;
if(N % 4 == 1) return N + 2;
if(N % 4 == 2) return N + 2;
if(N % 4 == 3) return N - 1;
return 0;
}
};