题目来源:
leetcode题目,网址:1716. 计算力扣银行的钱 - 力扣(LeetCode)
解题思路:
第一周他会存入 28 元,此后每周增加 7 元,到第 n 天一共经历了 n/7 (整除)个完整的周,剩余 (n-n/7)天 ,第一天存入 n/7+1 元,此后每天增加一元。利用等差数列求和公式求和即可。
解题代码:
class Solution {
public int totalMoney(int n) {
int fristWeek=28;//每周多7元
//等差求和公式 n*a1+7*n*(n-1)/2
int wholeWeekNum=n/7;
int res=wholeWeekNum*28+7*wholeWeekNum*(wholeWeekNum-1)/2;
res+=(n-wholeWeekNum*7)*(wholeWeekNum+1)+1*(n-wholeWeekNum*7)*(n-wholeWeekNum*7-1)/2;
return res;
}
}
总结:
官方题解给出了两种解法。第一种是暴力计算,第二种是等差数列求和优化。
官方题解在暴力计算时,每天的存入的钱是 当前是第几周+当前是一周里的第几天-1。