题目描述:
思路:
一开始将初始的那个计算出来,然后我们计算需要减去的和,然后我们加上所有的和,
然后进行总的计算即可
class Solution {
public int clumsy(int N) {
if(N == 1){
return 1;
}
if(N == 2 ){
return 2;
}
if(N == 3){
return 6;
}
int sum = 0;
int tem = N + 1;
while (tem - 4 > 0) {
sum += tem-4;
System.out.println("所有的加法" + (tem - 4));
tem -= 4;
}
int chengfa = N * (N - 1) / (N - 2);
System.out.println("第一个乘法" + chengfa);
sum += chengfa;
int jianfa = 0;
int chushi = N - 4;
while (chushi - 3 >= 0) {
jianfa += chushi*(chushi - 1)/(chushi - 2);
chushi -= 4;
}
if(chushi == 1){
jianfa += 1;
}else if(chushi == 2) {
jianfa+=2;
}
return sum - jianfa;
}
}
这个使用动态规划的算法可以好好看看,比较有新意
class Solution {
public:
int dp[10010];
int get3(int n){
if(n==1) return 1;
if(n==2) return 2;
return n*(n-1)/(n-2);
}
int getdp(int n){
if(dp[n]!=0) return dp[n];
dp[n] = n*(n-1)/(n-2)+n-3+getdp(n-4) - 2*get3(n-4);
return dp[n];
}
int clumsy(int N) {
dp[1] = 1;
dp[2] = 2;
dp[3] = 6;
dp[4] = 7;
return getdp(N);
}
};