Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 57 additions & 9 deletions solution/1700-1799/1716.Calculate Money in Leetcode Bank/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,35 @@ tags:

<!-- solution:start -->

### 方法一
### 方法一:数学

根据题目描述,每周的存款情况如下:

```
第 1 周:1, 2, 3, 4, 5, 6, 7
第 2 周:2, 3, 4, 5, 6, 7, 8
第 3 周:3, 4, 5, 6, 7, 8, 9
...
第 k 周:k, k+1, k+2, k+3, k+4, k+5, k+6
```

存款天数为 $n$,那么完整的周数为 $k = \lfloor n / 7 \rfloor$,剩余天数为 $b = n \mod 7$。

完整的 $k$ 周的存款总额,可以通过等差数列求和公式计算:

$$
S_1 = \frac{k}{2} \times (28 + 28 + 7 \times (k - 1))
$$

剩余的 $b$ 天的存款总额,同样可以通过等差数列求和公式计算:

$$
S_2 = \frac{b}{2} \times (k + 1 + k + 1 + b - 1)
$$

最终的总存款金额为 $S = S_1 + S_2$。

时间复杂度 $O(1)$,空间复杂度 $O(1)$。

<!-- tabs:start -->

Expand All @@ -70,17 +98,21 @@ tags:
```python
class Solution:
def totalMoney(self, n: int) -> int:
a, b = divmod(n, 7)
return (28 + 28 + 7 * (a - 1)) * a // 2 + (a * 2 + b + 1) * b // 2
k, b = divmod(n, 7)
s1 = (28 + 28 + 7 * (k - 1)) * k // 2
s2 = (k + 1 + k + 1 + b - 1) * b // 2
return s1 + s2
```

#### Java

```java
class Solution {
public int totalMoney(int n) {
int a = n / 7, b = n % 7;
return (28 + 28 + 7 * (a - 1)) * a / 2 + (a * 2 + b + 1) * b / 2;
int k = n / 7, b = n % 7;
int s1 = (28 + 28 + 7 * (k - 1)) * k / 2;
int s2 = (k + 1 + k + 1 + b - 1) * b / 2;
return s1 + s2;
}
}
```
Expand All @@ -91,8 +123,10 @@ class Solution {
class Solution {
public:
int totalMoney(int n) {
int a = n / 7, b = n % 7;
return (28 + 28 + 7 * (a - 1)) * a / 2 + (a * 2 + b + 1) * b / 2;
int k = n / 7, b = n % 7;
int s1 = (28 + 28 + 7 * (k - 1)) * k / 2;
int s2 = (k + 1 + k + 1 + b - 1) * b / 2;
return s1 + s2;
}
};
```
Expand All @@ -101,8 +135,22 @@ public:

```go
func totalMoney(n int) int {
a, b := n/7, n%7
return (28+28+7*(a-1))*a/2 + (a*2+b+1)*b/2
k, b := n/7, n%7
s1 := (28 + 28 + 7*(k-1)) * k / 2
s2 := (k + 1 + k + 1 + b - 1) * b / 2
return s1 + s2
}
```

#### TypeScript

```ts
function totalMoney(n: number): number {
const k = (n / 7) | 0;
const b = n % 7;
const s1 = (((28 + 28 + 7 * (k - 1)) * k) / 2) | 0;
const s2 = (((k + 1 + k + 1 + b - 1) * b) / 2) | 0;
return s1 + s2;
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,35 @@ tags:

<!-- solution:start -->

### Solution 1
### Solution 1: Math

According to the problem description, the deposit situation for each week is as follows:

```bash
Week 1: 1, 2, 3, 4, 5, 6, 7
Week 2: 2, 3, 4, 5, 6, 7, 8
Week 3: 3, 4, 5, 6, 7, 8, 9
...
Week k: k, k+1, k+2, k+3, k+4, k+5, k+6
```

Given $n$ days of deposits, the number of complete weeks is $k = \lfloor n / 7 \rfloor$, and the remaining days is $b = n \mod 7$.

The total deposit for the complete $k$ weeks can be calculated using the arithmetic sequence sum formula:

$$
S_1 = \frac{k}{2} \times (28 + 28 + 7 \times (k - 1))
$$

The total deposit for the remaining $b$ days can also be calculated using the arithmetic sequence sum formula:

$$
S_2 = \frac{b}{2} \times (k + 1 + k + 1 + b - 1)
$$

The final total deposit amount is $S = S_1 + S_2$.

The time complexity is $O(1)$ and the space complexity is $O(1)$.

<!-- tabs:start -->

Expand All @@ -71,17 +99,21 @@ tags:
```python
class Solution:
def totalMoney(self, n: int) -> int:
a, b = divmod(n, 7)
return (28 + 28 + 7 * (a - 1)) * a // 2 + (a * 2 + b + 1) * b // 2
k, b = divmod(n, 7)
s1 = (28 + 28 + 7 * (k - 1)) * k // 2
s2 = (k + 1 + k + 1 + b - 1) * b // 2
return s1 + s2
```

#### Java

```java
class Solution {
public int totalMoney(int n) {
int a = n / 7, b = n % 7;
return (28 + 28 + 7 * (a - 1)) * a / 2 + (a * 2 + b + 1) * b / 2;
int k = n / 7, b = n % 7;
int s1 = (28 + 28 + 7 * (k - 1)) * k / 2;
int s2 = (k + 1 + k + 1 + b - 1) * b / 2;
return s1 + s2;
}
}
```
Expand All @@ -92,8 +124,10 @@ class Solution {
class Solution {
public:
int totalMoney(int n) {
int a = n / 7, b = n % 7;
return (28 + 28 + 7 * (a - 1)) * a / 2 + (a * 2 + b + 1) * b / 2;
int k = n / 7, b = n % 7;
int s1 = (28 + 28 + 7 * (k - 1)) * k / 2;
int s2 = (k + 1 + k + 1 + b - 1) * b / 2;
return s1 + s2;
}
};
```
Expand All @@ -102,8 +136,22 @@ public:

```go
func totalMoney(n int) int {
a, b := n/7, n%7
return (28+28+7*(a-1))*a/2 + (a*2+b+1)*b/2
k, b := n/7, n%7
s1 := (28 + 28 + 7*(k-1)) * k / 2
s2 := (k + 1 + k + 1 + b - 1) * b / 2
return s1 + s2
}
```

#### TypeScript

```ts
function totalMoney(n: number): number {
const k = (n / 7) | 0;
const b = n % 7;
const s1 = (((28 + 28 + 7 * (k - 1)) * k) / 2) | 0;
const s2 = (((k + 1 + k + 1 + b - 1) * b) / 2) | 0;
return s1 + s2;
}
```

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
class Solution {
public:
int totalMoney(int n) {
int a = n / 7, b = n % 7;
return (28 + 28 + 7 * (a - 1)) * a / 2 + (a * 2 + b + 1) * b / 2;
int k = n / 7, b = n % 7;
int s1 = (28 + 28 + 7 * (k - 1)) * k / 2;
int s2 = (k + 1 + k + 1 + b - 1) * b / 2;
return s1 + s2;
}
};
};
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
func totalMoney(n int) int {
a, b := n/7, n%7
return (28+28+7*(a-1))*a/2 + (a*2+b+1)*b/2
}
k, b := n/7, n%7
s1 := (28 + 28 + 7*(k-1)) * k / 2
s2 := (k + 1 + k + 1 + b - 1) * b / 2
return s1 + s2
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
class Solution {
public int totalMoney(int n) {
int a = n / 7, b = n % 7;
return (28 + 28 + 7 * (a - 1)) * a / 2 + (a * 2 + b + 1) * b / 2;
int k = n / 7, b = n % 7;
int s1 = (28 + 28 + 7 * (k - 1)) * k / 2;
int s2 = (k + 1 + k + 1 + b - 1) * b / 2;
return s1 + s2;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
class Solution:
def totalMoney(self, n: int) -> int:
a, b = divmod(n, 7)
return (28 + 28 + 7 * (a - 1)) * a // 2 + (a * 2 + b + 1) * b // 2
k, b = divmod(n, 7)
s1 = (28 + 28 + 7 * (k - 1)) * k // 2
s2 = (k + 1 + k + 1 + b - 1) * b // 2
return s1 + s2
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
function totalMoney(n: number): number {
const k = (n / 7) | 0;
const b = n % 7;
const s1 = (((28 + 28 + 7 * (k - 1)) * k) / 2) | 0;
const s2 = (((k + 1 + k + 1 + b - 1) * b) / 2) | 0;
return s1 + s2;
}
Loading