零錢問題

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 };
View Code

給定不一樣面額的硬幣 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 };
View Code
相關文章
相關標籤/搜索