1. 程式人生 > 其它 >LeetCode-2043 兩數相加題解

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);
 */

 

執行結果