-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paths2043_simple_bank_system.go
More file actions
86 lines (71 loc) · 2.3 KB
/
s2043_simple_bank_system.go
File metadata and controls
86 lines (71 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
https://leetcode.com/problems/simple-bank-system/
You have been tasked with writing a program for a popular bank that will
automate all its incoming transactions (transfer, deposit, and withdraw). The
bank has n accounts numbered from 1 to n. The initial balance of each account
is stored in a 0-indexed integer array balance, with the (i + 1)th account
having an initial balance of balance[i].
Execute all the valid transactions. A transaction is valid if:
The given account number(s) are between 1 and n, and
The amount of money withdrawn or transferred from is less than or equal to the
balance of the account.
Implement the Bank class:
Bank(long[] balance) Initializes the object with the 0-indexed integer array
balance.
boolean transfer(int account1, int account2, long money) Transfers money
dollars from the account numbered account1 to the account numbered account2.
Return true if the transaction was successful, false otherwise.
boolean deposit(int account, long money) Deposit money dollars into the
account numbered account. Return true if the transaction was successful,
false otherwise.
boolean withdraw(int account, long money) Withdraw money dollars from the
account numbered account. Return true if the transaction was successful,
false otherwise.
*/
package solutions
type Bank struct {
accs []int64
}
// NewBank must call Constructor to pass LeetCode tests
func NewBank(balance []int64) Bank {
return Bank{accs: append([]int64{-1}, balance...)}
}
func (b *Bank) apply(fn func() bool, ids ...int) bool {
for _, id := range ids {
if id < 0 || id > len(b.accs) {
return false
}
}
return fn()
}
func (b *Bank) Transfer(account1 int, account2 int, money int64) bool {
return b.apply(func() bool {
if b.accs[account1]-money < 0 {
return false
}
b.accs[account1] -= money
b.accs[account2] += money
return true
}, account1, account2)
}
func (b *Bank) Deposit(account int, money int64) bool {
return b.apply(func() bool {
if money < 0 {
return false
}
b.accs[account] += money
return true
}, account)
}
func (b *Bank) Withdraw(account int, money int64) bool {
return b.apply(func() bool {
if money < 0 {
return false
}
if b.accs[account]-money < 0 {
return false
}
b.accs[account] -= money
return true
}, account)
}