天天看点

LeetCode2043. 简易银行系统(Java打卡版)

2043. 简易银行系统(中等)

这题不配是中等难度,过于简单了。

题目描述:

LeetCode2043. 简易银行系统(Java打卡版)

示例:

LeetCode2043. 简易银行系统(Java打卡版)

提示:

LeetCode2043. 简易银行系统(Java打卡版)

思路

怎么说呢,就是单纯的业务逻辑;以LeetCode的“尿性”,题目简单必有妖,需要格外注意边界溢出问题;比如:账户不存在、账户钱不够。(原以为一个中等难度的题,莫不是要考我并发场景,结果:就这!!)

已有的帐号为1 到 n,对账号有如下三种操作:

1)transfer 操作

  • 如果要进行操作的帐号不在已有的帐号中,则交易无效。
  • 如果账号account1 的余额小于money,那么交易无效。
  • 交易有效时,将账号 account1 的余额减少 money,账号 account2 的余额增加 money。

2)deposit 操作

  • 如果要进行操作的帐号不在已有的帐号中,则交易无效。
  • 交易有效时,将账号 account 的余额增加 money。
  • 如果要进行操作的帐号不在已有的帐号中,则易无效。
  • 如果账号 account 的余额小于 money,那么交易无效。
  • 交易有效时,我们将账号 account 的余额减少 money。

代码(Java)

class Bank {

    public  long[] balance;

    public Bank(long[] balance) {
        this.balance = balance;
    }
    
    public boolean transfer(int account1, int account2, long money) {
        int accounts = balance.length;
        if (account1 > accounts || account2 > accounts || balance[account1 - 1] < money) {
            return false;
        }
        balance[account1 - 1] -= money;
        balance[account2 - 1] += money;
        return true;
    }
    
    public boolean deposit(int account, long money) {
        int accounts = balance.length;
        if (account > accounts) {
            return false;
        }
        balance[account - 1] += money;
        return true;
    }
    
    public boolean withdraw(int account, long money) {
        int accounts = balance.length;
        if (account > accounts || balance[account - 1] < money) {
            return false;
        }
        balance[account - 1] -= money;
        return true;
    }
}