20250105 finished.
This commit is contained in:
parent
90bee62597
commit
68eda6ad1c
|
@ -412,3 +412,5 @@ mod p729_my_calendar_i;
|
||||||
mod p731_my_calendar_ii;
|
mod p731_my_calendar_ii;
|
||||||
|
|
||||||
mod p732_my_calendar_iii;
|
mod p732_my_calendar_iii;
|
||||||
|
|
||||||
|
mod p2241_design_an_atm_machine;
|
||||||
|
|
79
src/problem/p2241_design_an_atm_machine.rs
Normal file
79
src/problem/p2241_design_an_atm_machine.rs
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
/**
|
||||||
|
* [2241] Design an ATM Machine
|
||||||
|
*/
|
||||||
|
pub struct Solution {}
|
||||||
|
|
||||||
|
// submission codes start here
|
||||||
|
|
||||||
|
struct ATM {
|
||||||
|
money: Vec<i32>,
|
||||||
|
denomination: [i32; 5],
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `&self` means the method takes an immutable reference.
|
||||||
|
* If you need a mutable reference, change it to `&mut self` instead.
|
||||||
|
*/
|
||||||
|
impl ATM {
|
||||||
|
fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
money: vec![0; 5],
|
||||||
|
denomination: [20, 50, 100, 200, 500],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn deposit(&mut self, banknotes_count: Vec<i32>) {
|
||||||
|
for (i, v) in banknotes_count.into_iter().enumerate() {
|
||||||
|
self.money[i] += v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn withdraw(&mut self, mut amount: i32) -> Vec<i32> {
|
||||||
|
let mut result = vec![0; 5];
|
||||||
|
|
||||||
|
for (i, &v) in self.denomination.iter().enumerate().rev() {
|
||||||
|
result[i] = (amount / v).min(self.money[i]);
|
||||||
|
|
||||||
|
amount -= result[i] * v;
|
||||||
|
}
|
||||||
|
|
||||||
|
if amount != 0 {
|
||||||
|
vec![-1]
|
||||||
|
} else {
|
||||||
|
for (i, &v) in result.iter().enumerate() {
|
||||||
|
self.money[i] -= v;
|
||||||
|
}
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Your ATM object will be instantiated and called as such:
|
||||||
|
* let obj = ATM::new();
|
||||||
|
* obj.deposit(banknotesCount);
|
||||||
|
* let ret_2: Vec<i32> = obj.withdraw(amount);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// submission codes end
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_2241() {
|
||||||
|
let mut atm = ATM::new();
|
||||||
|
|
||||||
|
atm.deposit(vec![0, 10, 0, 3, 0]);
|
||||||
|
assert_eq!(vec![0, 2, 0, 2, 0], atm.withdraw(500));
|
||||||
|
|
||||||
|
let mut atm = ATM::new();
|
||||||
|
|
||||||
|
atm.deposit(vec![0, 0, 1, 2, 1]);
|
||||||
|
assert_eq!(vec![0, 0, 1, 0, 1], atm.withdraw(600));
|
||||||
|
atm.deposit(vec![0, 1, 0, 1, 1]);
|
||||||
|
assert_eq!(vec![-1], atm.withdraw(600));
|
||||||
|
assert_eq!(vec![0, 1, 0, 0, 1], atm.withdraw(550));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user