1,在檸檬水攤上,每一杯檸檬水的售價爲 5 美圓。網絡
顧客排隊購買你的產品,(按帳單 bills 支付的順序)一次購買一杯。ide
每位顧客只買一杯檸檬水,而後向你付 5 美圓、10 美圓或 20 美圓。你必須給每一個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美圓。函數
注意,一開始你手頭沒有任何零錢。spa
若是你能給每位顧客正確找零,返回 true ,不然返回 false 。3d
示例 1:code
輸入:[5,5,5,10,20]
輸出:true
解釋:
前 3 位顧客那裏,咱們按順序收取 3 張 5 美圓的鈔票。
第 4 位顧客那裏,咱們收取一張 10 美圓的鈔票,並返還 5 美圓。
第 5 位顧客那裏,咱們找還一張 10 美圓的鈔票和一張 5 美圓的鈔票。
因爲全部客戶都獲得了正確的找零,因此咱們輸出 true。
示例 2:blog
輸入:[5,5,10]
輸出:true
示例 3:leetcode
輸入:[10,10]
輸出:false
示例 4:產品
輸入:[5,5,10,10,20]
輸出:false
解釋:
前 2 位顧客那裏,咱們按順序收取 2 張 5 美圓的鈔票。
對於接下來的 2 位顧客,咱們收取一張 10 美圓的鈔票,而後返還 5 美圓。
對於最後一位顧客,咱們沒法退回 15 美圓,由於咱們如今只有兩張 10 美圓的鈔票。
因爲不是每位顧客都獲得了正確的找零,因此答案是 false。
it
提示:
0 <= bills.length <= 10000
bills[i] 不是 5 就是 10 或是 20
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/lemonade-change
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。
1 class Solution { 2 public: 3 bool lemonadeChange(vector<int>& bills) { 4 int a = 0,b = 0; 5 for(int i = 0;i<bills.size();i++){ 6 if(bills[i] == 5) 7 a++; 8 if(bills[i] == 10){ 9 if(a == 0) 10 return false; 11 a--; 12 b++; 13 } 14 if(bills[i] == 20){ 15 if (a > 0 && b > 0){ 16 a--; 17 b--; 18 } 19 else if(a >= 3) 20 a -= 3; 21 else 22 return false; 23 24 } 25 } 26 return true; 27 28 } 29 };
2
給定不一樣面額的硬幣 coins 和一個總金額 amount。編寫一個函數來計算能夠湊成總金額所需的最少的硬幣個數。若是沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3
輸出: -1
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/coin-change
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。
1 #include<algorithm> 2 class Solution { 3 public: 4 int coinChange(vector<int>& coins, int amount) { 5 int max = amount + 1; 6 int dp[amount+1]; 7 for(int i = 0;i<amount+1;i++) 8 dp[i] = max; 9 dp[0] = 0; 10 for(int i = 1;i <= amount;i++) 11 for(int j = 0;j<coins.size();j++){ 12 if(coins[j] <= i) 13 dp[i] = min(dp[i],dp[i-coins[j]]+1); 14 } 15 return dp[amount]>amount?-1:dp[amount]; 16 } 17 };