返回
你不应该错过的 leetcode 860 柠檬水找零指南
前端
2023-10-21 12:20:05
导言
在柠檬水摊上,你面前排着一条顾客的队伍,他们依次购买柠檬水,每杯售价为 5 美元。顾客使用 5 美元、10 美元或 20 美元纸币向你付款。为了避免找零麻烦,你需要确定是否总是能够为顾客找零。
解决这个问题的關鍵在於你能否找到一种方法來管理找零,並確保你始終擁有足夠的零錢來滿足顧客的需求。
实现步骤
-
初始化变量
int five_dollar_bills = 0; int ten_dollar_bills = 0; int twenty_dollar_bills = 0;
-
循环处理顾客付款
for (int i = 0; i < bills.length; i++) { int bill = bills[i]; // 处理 5 美元纸币 if (bill == 5) { five_dollar_bills++; } // 处理 10 美元纸币 else if (bill == 10) { if (five_dollar_bills > 0) { five_dollar_bills--; ten_dollar_bills++; } else { return false; // 无法找零 } } // 处理 20 美元纸币 else if (bill == 20) { if (five_dollar_bills > 0 && ten_dollar_bills > 0) { five_dollar_bills--; ten_dollar_bills--; twenty_dollar_bills++; } else if (five_dollar_bills >= 3) { five_dollar_bills -= 3; twenty_dollar_bills++; } else { return false; // 无法找零 } } }
-
检查最终找零情况
return five_dollar_bills >= 0 && ten_dollar_bills >= 0 && twenty_dollar_bills >= 0;
编程示例
JavaScript
/**
* 判断是否能够为顾客找零。
*
* @param {number[]} bills 顾客付款的金额
* @return {boolean} 是否能够找零
*/
const lemonadeChange = (bills) => {
let five_dollar_bills = 0;
let ten_dollar_bills = 0;
let twenty_dollar_bills = 0;
for (let i = 0; i < bills.length; i++) {
const bill = bills[i];
// 处理 5 美元纸币
if (bill === 5) {
five_dollar_bills++;
}
// 处理 10 美元纸币
else if (bill === 10) {
if (five_dollar_bills > 0) {
five_dollar_bills--;
ten_dollar_bills++;
} else {
return false; // 无法找零
}
}
// 处理 20 美元纸币
else if (bill === 20) {
if (five_dollar_bills > 0 && ten_dollar_bills > 0) {
five_dollar_bills--;
ten_dollar_bills--;
twenty_dollar_bills++;
} else if (five_dollar_bills >= 3) {
five_dollar_bills -= 3;
twenty_dollar_bills++;
} else {
return false; // 无法找零
}
}
}
return five_dollar_bills >= 0 && ten_dollar_bills >= 0 && twenty_dollar_bills >= 0;
};
Python
def lemonade_change(bills):
"""
判断是否能够为顾客找零。
:param bills: 顾客付款的金额
:return: 是否能够找零
"""
five_dollar_bills = 0
ten_dollar_bills = 0
twenty_dollar_bills = 0
for bill in bills:
# 处理 5 美元纸币
if bill == 5:
five_dollar_bills += 1
# 处理 10 美元纸币
elif bill == 10:
if five_dollar_bills > 0:
five_dollar_bills -= 1
ten_dollar_bills += 1
else:
return False # 无法找零
# 处理 20 美元纸币
elif bill == 20:
if five_dollar_bills > 0 and ten_dollar_bills > 0:
five_dollar_bills -= 1
ten_dollar_bills -= 1
twenty_dollar_bills += 1
elif five_dollar_bills >= 3:
five_dollar_bills -= 3
twenty_dollar_bills += 1
else:
return False # 无法找零
return five_dollar_bills >= 0 and ten_dollar_bills >= 0 and twenty_dollar_bills >= 0
Java
class Solution {
/**
* 判断是否能够为顾客找零。
*
* @param bills 顾客付款的金额
* @return 是否能够找零
*/
public boolean lemonadeChange(int[] bills) {
int five_dollar_bills = 0;
int ten_dollar_bills = 0;
int twenty_dollar_bills = 0;
for (int bill : bills) {
// 处理 5 美元纸币
if (bill == 5) {
five_dollar_bills++;
}
// 处理 10 美元纸币
else if (bill == 10) {
if (five_dollar_bills > 0) {
five_dollar_bills--;
ten_dollar_bills++;
} else {
return false; // 无法找零
}
}
// 处理 20 美元纸币
else if (bill == 20) {
if (five_dollar_bills > 0 && ten_dollar_bills > 0) {
five_dollar_bills--;
ten_dollar_bills--;
twenty_dollar_bills++;
} else if (five_dollar_bills >= 3) {
five_dollar_bills -= 3;
twenty_dollar_bills++;
} else {
return false; // 无法找零
}
}
}
return five_dollar_bills >= 0 && ten_dollar_bills >= 0 && twenty_dollar_bills >= 0;
}
}
C++
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int five_dollar_bills = 0;
int ten_dollar_bills = 0;
int twenty_dollar_bills = 0;
for (int bill : bills) {
// 处理 5 美元纸币
if (bill == 5) {
five_dollar_bills++;
}
// 处理 10 美元纸币
else if (bill == 10) {
if (five_dollar_bills > 0) {
five_dollar_bills--;
ten_dollar_bills++;
} else {
return false; // 无法找零
}
}
// 处理 20 美元纸币
else if (bill == 20) {
if (five_dollar_bills > 0 && ten_dollar_bills > 0) {
five_dollar_bills--;
ten_dollar_bills--;
twenty_dollar_bills++;
} else if (five_dollar_bills >= 3) {
five_dollar_bills -= 3;
twenty_dollar_bills++;
} else {
return false; // 无法找零
}
}
}
return five_dollar_bills >= 0 && ten_dollar_