首页 > 编程语言 >吴师兄学算法day08 贪心 860. 柠檬水找零

吴师兄学算法day08 贪心 860. 柠檬水找零

时间:2024-01-19 18:34:38浏览次数:46  
标签:10 day08 20 找零 dic 钞票 柠檬水 five

题目:860. 柠檬水找零

易错点:

  • 我写的是if esle 哈哈,第一次还写错了。i ==20的时候,5元只找了1张。哈哈哈.应该找3张
  •  

我的代码:

class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        dic = {5:0,10:0,20:0}

        for i in bills:
            if i== 5:
                dic[5] +=1  # 收入5元1张
                continue

            if i == 10:
                if dic[5]>= 1:    # 余额里有5元就继续
                    dic[10] = dic[10] + 1   # 增加收入
                    dic[5] = dic[5] - 1 # 找零
                else:
                    return False
                
            if i == 20:
                
                if dic[10]>=1 and dic[5]>=1:    # 找10元和5元的各一张
                    dic[10] = dic[10] - 1   # 找零10元1张
                    dic[5] = dic[5] -1      # 找零5元1张    
                    dic[20] = dic[20] + 1   # 进账20元1张
                    continue
                # 实在没招了,找5元的
                if dic[5] >=3:  # 如果有3张5元的,可以找开零钱
                    dic[20] = dic[20] + 1
                    dic[5] = dic[5] - 3 # 减去3张5元
                    continue
                else:   # 如果不满足,直接就结束了
                    return False
            
        # 能走到这里,说明都能找开零钱
        return True 

老师的代码:

# 登录 AlgoMooc 官网获取更多算法图解
# https:#www.algomooc.com
# 作者:程序员吴师兄
# 代码有看不懂的地方一定要私聊咨询吴师兄呀
# 柠檬水找零( LeetCode 860 ):https:#leetcode-cn.com/problems/lemonade-change/
class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        # 用来记录 5 元钞票的数量
        five = 0

        # 用来记录 10 元钞票的数量
        ten = 0

        # 顾客开始按顺序购买,并找零
        for i  in range(len(bills)) : 
            # 1、如果发现是 5 元面额
            if bills[i] == 5 :
                # 那么可以直接收钱,不需要找零
                # 并且 5 元钞票的数量加 1
                five += 1

                # 2、如果发现是 10 元面额
            elif bills[i] == 10 :

                # 如果手中有 5 元钞票,则找零 5 元
                if five > 0 :
                    # 5 元钞票的数量减 1
                    five -= 1
                    # 10 元钞票的数量加 1
                    ten += 1
                else : 
                    # 如果手中没有 5 元钞票,说明找零失败
                    return False
    
                # 3、如果发现是 20 元面额
            else : 

                # 如果手中有 10 元 和 5 元钞票,则找零 1 张 10 元和 1 张 5 元的钞票
                if ten > 0 and five > 0 :
                    # 5 元钞票的数量减 1
                    five -= 1
                    # 10 元钞票的数量减 1
                    ten -= 1
                else:
                    # 如果手中只有 5 元的,并且数量超过或者等于 3 张
                    # 那么找零 3 张 5 元的钞票
                    if five >= 3 : 
                        # 5 元钞票的数量减 3
                        five -= 3
                    else :
                        # 说明这个时候顾客付 20 元的时候
                        # 1、手中没有 1 张 10 元的和 1 张 5 元的
                        # 2、手中没有 3 张 5 元的
                        # 说明找零失败
                        return False

        # 所有顾客都找零了,成功
        return True

扩展写法:

总结:

  • 老师跟我写的差不多。。。哈哈

参考:

https://r07na4yqwor.feishu.cn/docx/FW37dJAfgo49iXxZnmccPmDinWc

标签:10,day08,20,找零,dic,钞票,柠檬水,five
From: https://www.cnblogs.com/liqi175/p/17975335

相关文章

  • 吴师兄学算法day08 贪心 134. 加油站
    题目:134.加油站理解难点:理解比较难,就是遍历1遍,尽可能找局部满足要求的。如果总油耗满足要求。那局部油耗找的出发点就是对的。遍历的时候,因为答案唯一,要么就满足要求,要么不满足要求。而<0证明之前的都不满足要求,满足要求的一定在后面。这题还是个环,环这里有点没太理解。环......
  • 吴师兄学算法day08 贪心 LC455. 分发饼干
    题目:455. 分发饼干易错点:这两个变量名容易弄混s是饼干g是胃口图示:我的代码:classSolution:deffindContentChildren(self,g:List[int],s:List[int])->int:#对饼干s排序s.sort()#对孩子们的胃口g进行排序g.sort()......
  • day08-字典
    字典(Dict)是一种可变、无序的数据类型;那等等...我们回忆一下,字符串列表元祖是什么样的?字符串不可变,有序列表可变,有序元祖不可变,有序如何判断有序和无序呢,我首先确定在字符串、列表、元祖篇我们都讲到了切片取值,说明他们都是有顺序的,而字典是无序的,说明字典无法通过切片取值,......
  • Day08---IDEA
    Day08IDEA中的第一个代码IDEA项目结构介绍project(项目)module(模块)package(包)class(类)步骤:新建项目-->在项目内新建模块-->在新建模块内新建包-->在包内创建类常用的系统设置提示忽略大小写修改主题修改注释的颜色修改字体自动导包IDEA的项目和模块......
  • JavaWeb - Day08 - MySQL - 多表查询、事务、索引 - Mybatis - 入门
    01.MySQL-多表查询-概述数据准备#建议:创建新的数据库createdatabasedb04;usedb04;--部门表createtabletb_dept(idintunsignedprimarykeyauto_incrementcomment'主键ID',namevarchar(10)notnulluniquecomment'部门名称',......
  • Day08 逻辑结构(switch和增强for)
    1.知识点if,switch,for,while等等和C++、js等相似,需要注意以下几点:1.1有关switchswitch中的casevalue:value类型可以是byte,short,int,char。value类型:string类型是JDK7才开始支持的1.2有关增强forfor(元素类型变量名:需要遍历的数组或集合){......
  • Day08 Java关键字和标识符
    Java关键字和标识符首先Java的所有组成部分都需要有名字类名、方法名、变量名都被称为标识符如HelloWorld中publicclassHello{ publicstaticvoidmain(String[]args){Stringteacher="秦疆"; System.out.print("Hello,World!"); }}关键词有publicclas......
  • JavaSE day08 - Lambda,Stream,File,递归
    JavaSEday08-Lambda,Stream,File,递归今日目标Lambda表达式Stream流File类递归1Lambda表达式1.1体验Lambda表达式packagecom.itheima.lambda_demo;/*Lambda表达式体验:*/publicclassLambdaDemo{publicstaticvoidmain(String[]ar......
  • day08 总结和考试
    day08总结和考试课程目标:对第一模块“Python基础”阶段的知识点进行总结和考试,让学员更好的掌握此模块的相关知识。课程概要:代码规范知识补充阶段总结(思维导图)考试题1.代码规范程序员写代码是有规范的,不只是实现功能而已。1.1名称在Python开发过程中会创建文件夹......
  • 代码随想训练营第三十五天打卡(Python)| 860.柠檬水找零、406.根据身高重建队列、452. 用
    860.柠檬水找零classSolution:deflemonadeChange(self,bills:List[int])->bool:five,ten,twenty=0,0,0forbillinbills:ifbill==5:five+=1elifbill==10:iffive......