LeetCode每日一题 2043. 简易银行系统
LeetCode 2043. 简易银行系统 虽说是一道普通题,但事实上其实是简单题,LeetCode 似乎特别喜欢把一些设计类题目写成普通题。
不是很想讲,但是踩了小坑,为了让我自己记住还是写一下吧。
题目
你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有 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。
示例
1 | 输入: |
题解
这道题就是从头到尾把各种操作操作模拟一次就可以了,主要要注意以下几点:
- 账户必须存在于
balance数组中,也就是说如果这个 account 超出balance的 size 就不存在这个账户,所有的操作方法都需要检查一次是否存在。 withdraw()中需要注意 money 不能够大于 balance[account-1] 。- 在题目中没有讲清楚关于
transfer()这个方法的具体运作。应该来说是不允许 account1 和 account2 相同的,这样等于说是自己给自己转钱了;但题目答案允许了这种操作,导致我的提交错了两次,哭笑不得了属于是。
代码
1 | // 执行 212 ms 超越 65.13% 消耗 114.1 MB 超越 41.21% |
PS
请各位写代码的时候切记仔细检查代码错漏,我就是因为忘记在本题中 account 忘记减 1 导致提交错误了两次,在实际开发中出现这样的问题将可能会引发非常严重的错误,要以此引以为戒。
另外是真的很想吐槽 LeetCode 这样的题目,弄出这样脱裤子放屁的东西。
另外应该还可以缩减程序的执行时长,如果有会的大佬希望能够指点迷津。
最后是日常惯例:
此解法非唯一解,且不一定是最好的解法,如果您有更好的解法,欢迎在评论区中提出。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joyer的博客!
评论









