leetcode刷题记录-2043. 简易银行系统

573 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

前言

今天的题目为中等,但是我感觉是一道连简单都不如的没有意义的题目。。。简单题还需要找到对应的思路,但是这道题就是跟着题目的要求定义几个方法就能解出来了,也没有涉及任何设计方法,一点营养没有。

每日一题

今天的题目是 2043. 简易银行系统,难度为中等

  • 你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有 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 次

题解

模拟

感觉今天的题目是一道完全没有营养的题目,没有涉及到任何的算法,只要完全照着题目说的去写逻辑就能够完成,可能题目看着很长,但是其中涉及到的代码都是特别简单的判断。

首先我们可以用一个类来描述题目需要的Bank类,这样后面的方法定义也会更加直观一点,比起 es5 绑在 prototype 上的写法来看。

第一步就是定义这个类,然后将传入的代表账户以及账户对应金额的数组保存到类的属性上面

class Bank {
  constructor(balance) {
    this.balance = balance;
  }
}

然后题目需要一个 transfer 函数,可以实现不同的两个账户之间的转账,在金额不足的时候失败返回 false,成功返回 true,这是很简答的一个增加逻辑,这里不做过多的解释,直接上代码

transfer(account1, account2, money) {
    if (
      account1 <= this.balance.length &&
      account2 <= this.balance.length &&
      this.balance[account1 - 1] >= money
    ) {
      this.balance[account1 - 1] -= money;
      this.balance[account2 - 1] += money;
      return true;
    }
    return false;
}

接着就是向一个账户中存入指定的金额,这也是只需要判断一下这个账户是否存在,存在就修改对应数组的值返回 true,不存在则返回 false

deposit(account, money) {
    if (account <= this.balance.length) {
        this.balance[account - 1] += money;
        return true;
    }
    return false;
}

最后是取款方法,从一个账户中取出指定的金额,两个判断,账户是否存在,以及这个账户中有没有那么多钱,都满足就扣掉相应的值返回 true 不满足就是返回false

withdraw(account, money) {
    if (account <= this.balance.length &&
         this.balance[account - 1] >= money) {
      this.balance[account - 1] -= money;
      return true;
    }
    return false;
}

到这里把上面三个方法放入类中就能够得到题目需要的 Bank 类了,由于题目过于简单,就不放全部代码了。

image.png