LeetCode-2043 兩數相加題解
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/simple-bank-system
題目描述
你的任務是為一個很受歡迎的銀行設計一款程式,以自動化執行所有傳入的交易(轉賬,存款和取款)。銀行共有 n 個賬戶,編號從 1 到 n 。每個賬號的初始餘額儲存在一個下標從 0 開始的整數陣列 balance 中,其中第 (i + 1) 個賬戶的初始餘額是 balance[i] 。
請你執行所有 有效的 交易。如果滿足下面全部條件,則交易 有效 :
指定的賬戶數量在 1 和 n 之間,且
取款或者轉賬需要的錢的總數 小於或者等於 賬戶餘額。
實現 Bank 類:
Bank(long[] balance) 使用下標從 0 開始的整數陣列 balance 初始化該物件。
boolean transfer(int account1, int account2, long money) 從編號為 account1 的賬戶向編號為 account2 的賬戶轉帳 money 美元。如果交易成功,返回 true ,否則,返回 false 。
boolean deposit(int account, long money) 向編號為 account 的賬戶存款 money 美元。如果交易成功,返回 true ;否則,返回 false 。
boolean withdraw(int account, long money) 從編號為 account 的賬戶取款 money 美元。如果交易成功,返回 true ;否則,返回 false 。
示例:
輸入:
["Bank", "withdraw", "transfer", "deposit", "transfer", "withdraw"]
[[[10, 100, 20, 50, 30]], [3, 10], [5, 1, 20], [5, 20], [3, 4, 15], [10, 50]]
輸出:
[null, true, true, true, false, false]
解釋:
Bank bank = new Bank([10, 100, 20, 50, 30]);
bank.withdraw(3, 10); // 返回 true ,賬戶 3 的餘額是 $20 ,所以可以取款 $10 。
// 賬戶 3 餘額為 $20 - $10 = $10 。
bank.transfer(5, 1, 20); // 返回 true ,賬戶 5 的餘額是 $30 ,所以可以轉賬 $20 。
// 賬戶 5 的餘額為 $30 - $20 = $10 ,賬戶 1 的餘額為 $10 + $20 = $30 。
bank.deposit(5, 20); // 返回 true ,可以向賬戶 5 存款 $20 。
// 賬戶 5 的餘額為 $10 + $20 = $30 。
bank.transfer(3, 4, 15); // 返回 false ,賬戶 3 的當前餘額是 $10 。
// 所以無法轉賬 $15 。
bank.withdraw(10, 50); // 返回 false ,交易無效,因為賬戶 10 並不存在。
提示:
n == balance.length
1 <= n, account, account1, account2 <= 105
0 <= balance[i], money <= 1012
transfer, deposit, withdraw 三個函式,每個 最多呼叫 104 次
解題思路
僅刷題而言,這是一道簡單題,簡單模擬就好了,需要注意邊界條件,如果考慮多執行緒,也行會更難一點?
程式碼展示
class Bank { public: vector<long long> mBalance; Bank(vector<long long>& balance) { mBalance = balance; } bool transfer(int account1, int account2, long long money) { if(account1 - 1 < 0 || account1 - 1 >= mBalance.size() || account2 - 1 < 0 || account2 - 1 >= mBalance.size()) return false; if(mBalance[account1 - 1] < money) return false; mBalance[account1 - 1] -= money; mBalance[account2 - 1] += money; return true; } bool deposit(int account, long long money) { if(account - 1 < 0 || account - 1 >= mBalance.size()) return false; mBalance[account - 1] += money; return true; } bool withdraw(int account, long long money) { if(account - 1 < 0 || account - 1 >= mBalance.size()) return false; if(mBalance[account - 1] < money) return false; mBalance[account - 1] -= money; return true; } }; /** * Your Bank object will be instantiated and called as such: * Bank* obj = new Bank(balance); * bool param_1 = obj->transfer(account1,account2,money); * bool param_2 = obj->deposit(account,money); * bool param_3 = obj->withdraw(account,money); */
執行結果