前段时间刷着berkeley的CS61A,在第二次作业中遇到一个题,魔怔了好久,解出来才发现根本不难,笔记纪念一下。

倒序比数,数大即停

原题 —— Count Until Larger

Implement the function count_until_larger. count_until_larger takes in a positive integer num. count_until_larger counts the distance between the rightmost digit of num and the nearest greater digit; to do so, the function counts digits from right to left. Once it encounters a digit larger than the rightmost digit, it returns that count. If no such digit exists, then the function returns -1.

For example, 8117 has a rightmost digit of 7 and returns a count of 3.
9118117 also returns a count of 3: for both, the count stops at 8.
0 should be treated as having no digits and returns a count of -1.

def count_until_larger(num):"""Complete the function count_until_larger that takes in a positive integer num.count_until_larger examines the rightmost digit and counts digits from right toleft until it encounters a digit larger than the rightmost digit, then returns that count.>>> count_until_larger(117) # .Case 1-1>>> count_until_larger(8117) # .Case 23>>> count_until_larger(9118117) # .Case 33>>> count_until_larger(8777)  # .Case 43>>> count_until_larger(22) # .Case 5-1>>> count_until_larger(0) # .Case 6-1""""*** YOUR CODE HERE ***"

题目大意就是设计一个函数 count_until_larger:输入任意自然数,找到【比最后一位数大、且与最后一位距离最近的】数,返回它与最后一位数的距离。如果输入是0或者找不到此数,则返回-1。

大致的思路:

  1. 倒序取数,循环比较最后一位和往前数字的大小,
  2. 往前数字大于最后一位时:停止,return 循环的次数
  3. 所有数字循环完成,未找到更大数字:return -1

第一版答案,用string非常暴力拆解了数字:

def count_until_larger(num):rightmost,listn,count = num%10,[],0listn.extend(i for i in str(num//10))listn.reverse()for number,i in enumerate(listn):if int(i)> rightmost:return number+1else:count += 1if count != 0:return -1else:return count

第二版优化后的答案,用取余数的方法一步步拆解数字:

def count_until_larger(num):rightmost, aheadnum, count = num%10,((num - num%10)%10), 0while num > 1:if aheadnum > rightmost:return countelse:count += 1num = num // 10aheadnum = num %10return -1

第二版其实和标答已经非常相似了,但也还是有值得优化的:

  1. 前一位数可以直接用 num %10 (除10、取余数)表示
  2. 当 num 为个位数时,num //10 = 0 (取整除结果),所以不需要 num > 1

附上标答:

def count_until_larger(num):rightmost = num % 10count = 0while num:if num % 10 > rightmost:return countnum = num // 10count = count + 1return -1

折腾了一中午,鬼知道一开始看这题的时候陷入了什么bug中,解决了也是很爽~

伯克利CS61A错题笔记1.0相关推荐

  1. 笔记-软考高项-错题笔记汇总2

    错题笔记汇总2 1. 类的关系 依赖关系:描述了一个类的变化对依赖于它的类产生影响的情况 关联关系:描述了类的结构之间的关系 聚合关系:特殊关联关系,指明一个聚集(整体)和组成部分之间的关系 组合关系 ...

  2. 笔记-软考高项+中项-错题笔记汇总5

    错题笔记汇总5,中项+高项 1. 物流柔性化 物流柔性化战略是指为了实现物流作业适应消费需求的"多品种.小批量.多批次.短周期"趋势,灵活地组织和实施物流作业. 柔性化本来是为实现 ...

  3. 笔记-软考高项-错题笔记汇总1

    错题笔记汇总1 1. 信息系统的规划工具 在制订计划时,可以利用PERT图和甘特图: 访谈时,可以应用各种调查表和调查提纲: 在确定各部门.各层管理人员的需求,梳理流程时,可以采用会谈和正式会议的方法 ...

  4. 笔记-中项/高项学习期间的错题笔记1

    这是记录,在中项.高项过程中的错题笔记: https://www.zenwu.site/post/2b6d.html 1. 信息系统的规划工具 在制订计划时,可以利用PERT图和甘特图: 访谈时,可以 ...

  5. 一战上岸北京211 初试+复试 408错题笔记

    趁着现在还记着点复试的内容我先把复试的内容捋一遍 先是政治问题:(都是大概意思) 假如导师给你分配的事情比较多,你心情会发生什么样的变化 怎么看待近两年中国的抗疫历程 我国把人民生命健康放在第一位说明 ...

  6. 考研数学如何整理错题笔记?140分学长总结的模板,拿走直接用(含错题笔记)

    考研数学如何整理错题笔记?140分学长总结的模板,拿走直接用(含错题笔记) 数学错题笔记 2021<考研数学接力题典1800>勘误表(附学霸高分笔记) 2020考研初试成绩已经公布了,对于 ...

  7. 【牛客网java练习错题笔记】 --Java基础打卡day002

    [牛客网java练习错题笔记] --Java基础打卡day002 1 根据以下代码段,正确的是 2 在Java中,在同一包内,类Cat里面有个公共方法sleep(),该方法有static修饰,所以可以 ...

  8. Python计算机二级选择题错题笔记

    推荐用小黑的软件刷真题,是免费的.后面大题不要死记答案,可以去PTA刷题,练会了回来做二级题是很轻松的. 考试难度不大,我是不到25分钟就交卷了,因为选择题抽到了好几个新题不会做,差几分到优秀,大家加 ...

  9. 2021年广东工业大学第11届腾讯杯新生程序设计竞赛(同步赛)错题笔记

    目录: 题目链接 A 比比谁更大 B 过生日 D 机器人 G 拼牛牛 I 史莱姆 J 水题 K 烧烤丝瓜 L 歪脖子树下的灯 题目链接 A 比比谁更大 题目描述 在一个夜黑风高的晚上,牛哥哥吃完心爱的 ...

最新文章

  1. java优先级目数_10.Java运算符+(优先级、目数)+
  2. Gonet2 游戏server框架解析之gRPC提高(5)
  3. 2010最值得关注的10款小众互联网产品
  4. 魔术方法php,PHP中常用的魔术方法
  5. ARP协议,以及ARP欺骗
  6. [css] 你有没有使用过“形似猫头鹰”(例:`* + *{ ... }`) 的选择器?
  7. Redis官网——如何利用Redis做服务器集群的分布式锁
  8. nodeJs 控制台打印中文显示为Unicode解决方案
  9. python制作物联网控制软件下载_Python+树莓派制作IoT(物联网)门控设备
  10. 数据科学和人工智能技术笔记 十三、树和森林
  11. 物联网卡在智慧农业的作用有哪些
  12. 远程连接ubuntu中mysql的数据库
  13. Linux -- 特殊权限 (转)
  14. Linux串口调试工具
  15. adb interface 驱动问题(保证解决)
  16. webpack打包报错系列(二)Failed to load C:\Users\XXX\webpack.config.js:17 mode: ‘development‘
  17. 表情识别------CNN训练fer2013数据集
  18. 影响未来的十大网络技术
  19. java程序设计实验报告代写_代写file I/O作业、代写java Scanner I/O程序、代写java编程作业、代做java实验报告...
  20. 2020-7-3中兴IC开发设计师 专业面,

热门文章

  1. 怎么下载全国省市县行政区划边界
  2. [Erlang]Erlang与C的节点通信
  3. 13.4-软件测试标准 13.5-测试过程标准 13.6-测试文档标准 13.7-测试技术标准
  4. ESP8266_02程序的编译与下载
  5. SpaceX准备对Starhopper版星际飞船进行发射测试
  6. SSM 实现文件上传
  7. matlab二叉树计算期权价格,[转载]期权二叉树定价——SAS/IML初步 (一)
  8. VB程序学习代码记录20160731
  9. c语言:关于vs2012使用easyX的loadimage()加载资源图片
  10. HP V3500简要拆机流程