每日一题(2022-01-15):计算力扣银行的钱

每日一题(2022-01-15):计算力扣银行的钱

来源:力扣
难度:简单
题目:1716. 计算力扣银行的钱

题目详情

原题截图.png

题解思路

纯粹数学题啦,等差数列求和:

  • 等差数列求和公式为:Sn = n * a1 + n * (n - 1) * d / 2,注意条件为n ≥ 1
  • 整周的存钱和为等差数列,a1 = 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28d = 7 * 1 = 7;周内每天的存钱数也为等差数列,a1 = 1 + 周数 * 1d = 1
  • 整周数 = n / 7剩余天数 = n % 7

除此之外,由于题目条件n的取值范围为1~1000,那么打表似乎也是可以的。

代码结果

class Solution {
public:
    int totalMoney(int n) {
        return n < 7 ? (n * 1 + n * (n - 1) * 1 / 2) 
            : ((n / 7 * 28 + n / 7 * (n / 7 - 1) * 7 / 2) + (n % 7 * (1 + (n / 7) * 1)) + (n % 7 * (n % 7 - 1) * 1 / 2));
    }
};

运行结果.png