题目

类型:数学
image.png

解题思路

每个完整周的起始日金额相比上周起始日金额多 1,同时周内每日金额递增 1,因此相邻完整周的金额之和也满足「等差」性质,可直接使用「等差数列求和」公式 O(1) 求解完整周部分的金额之和;最后一周(若有)的金额也是同理。

代码

  1. class Solution {
  2. public int totalMoney(int n) {
  3. int a = n / 7, b = n % 7;
  4. int a1 = (1 + 7) * 7 / 2, an = (a + (a + 6)) * 7 / 2;
  5. int s1 = (a1 + an) * a / 2;
  6. a++;
  7. int s2 = (a + (a + b - 1)) * b / 2;
  8. return s1 + s2;
  9. }
  10. }