采用数学的方法,通过观察可得出四个数为一组,这四个数的计算顺序都知道,然后递归,则可得到正确答案,需要注意边界问题,即最后剩下的数做的什么运算。思路较为简单,代码如下:
class Solution {
public:
int clumsy(int n) {
if(n == 3) return 6;
else if(n == 2) return 2;
else if(n == 1) return 1;
int ans = calculate(n) + (n - 3);
n = n - 4;
while(n > 3){
ans = ans - calculate(n) + (n - 3);
n = n - 4;
}
if(n == 3) ans = ans - 6;
else if(n == 2) ans = ans - 2;
else if(n == 1) ans = ans - 1;
return ans;
}
int calculate(int n)
{
int ans = 0;
if(n > 3)
ans = int(n*(n-1)/(n-2));
return ans;
}
};