今日題目:leetcode860
題目鏈接:點擊跳轉題目
分析:
顧客只會給三種面值:5、10、20,先分類討論
- 當收到5美元時:不用找零,面值5張數+1
- 當收到10美元時:找零5美元,面值5張數-1、面值10張數+1
- 當收到20美元時:找零15美元,兩種情況
- 一張10美元 、 一張5美元
- 三張5美元
對于收到20美元時,該以什么為評判標準來選擇用哪一種找零方式呢?
縱觀三種情況,收到10、20美元時都會用到5美元,而10美元只有收到20美元時才可能使用;
貪心思路:為了能盡可能多的正確找零,所以當收到20美元時,盡量以10+5的方式找零,除非沒有10沒有再不得以用三張5美元,因為5美元的找零作用很大!
代碼:
class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five_nums = 0;int ten_nums = 0;for(auto & x : bills){if(x == 5) {five_nums++;continue;}if(x == 10) {ten_nums++;if(five_nums > 0) five_nums--;else return false;}if(x == 20){if(five_nums >0 && ten_nums > 0){five_nums--;ten_nums--;}else if(ten_nums ==0 && five_nums >= 3){five_nums -= 3;}else return false;}}return true;}
};