当前位置: 首页 > news >正文

leetcode 面试题 17.06. 2出现的次数

编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。

示例:

输入: 25
输出: 9
解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)

该问题用的方法数数组dp,首先我通过总结规律写出了相关的code。使用一个dp数组记录10i10^i10i以内会出现多少个2,再根据我们的数字进行处理就可以了。
需要知道的是,10i10^i10i10i−110^{i-1}10i1内出现的2个数的转化公式如下
dp[i]=dp[i−1]∗10+10i−1dp[i] = dp[i-1]*10+10^{i-1}dp[i]=dp[i1]10+10i1

class Solution:def numberOf2sInRange(self, n: int) -> int:if n < 2: return 0length = len(str(n))dp = [0 for _ in range(length)]for i in range(1,length):dp[i] = dp[i-1]*10+10**(i-1)res = 0string = str(n)for i in range(length-1,-1,-1):num = int(string[length-1-i])res += num*dp[i]n = n %(10**(i))if num == 2:res += (n+1)elif num > 2:res += 10**(i)return res 

在这里插入图片描述

但是写出该方法需要找规律,在面试的时候可能推理整个规律的细节不是很现实。所以我们需要学习问题的经典模板。
以下是回溯的版本,但是回溯过于耗时了,我们还是要使用一些内存来减少迭代的次数。

class Solution:def numberOf2sInRange(self, n: int) -> int:if n < 2: return 0string = str(n)length = len(string)def numdp(index,count,isLimit):if index == length:return countres = 0num = int(string[index]) if isLimit else 9for i in range(num+1):res += numdp(index+1,count+(i==2),isLimit and (i == num))return resreturn numdp(0,0,True)

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/number-of-2s-in-range-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

http://www.lryc.cn/news/55950.html

相关文章:

  • CMake入门教程【基础篇】5.configure_file构建配置
  • 软件开发可行性分析——健康食谱小程序
  • ShuffleNet V1 对花数据集训练
  • 测试人员转型是大势所趋:我的10年自动化测试经验分享
  • Pandas高级操作,建议收藏(一)
  • ASIC-WORLD Verilog(1)一日Verilog
  • 数据治理工具项目投标书技术部分-V1.6
  • ARMv8如何读取cache line中MOESI 状态以及Tag信息(tag RAM dirty RAM)
  • 学习通学习--脚本
  • C盘的深度清理
  • 43掌握自动化运维工具 Puppet 的基本用法,包括模块编写、资源管理
  • 【新2023Q2押题JAVA】华为OD机试 - 硬件产品销售方案
  • three.js实现3d球体树状结构布局——树状结构的实现
  • ChatGPT大解密:带您探讨机器学习背后的秘密、利用与发展
  • 3ds max2024带来了什么新功能(一)
  • HNU-电路与电子学-实验3
  • Hadoop MapReduce各阶段执行过程以及Python代码实现简单的WordCount程序
  • GitLab CI/CD 新书发布,助企业降本增效
  • 【分享】如何写出整洁的代码?
  • 视频剪辑:教你如何调整视频画面的大小。
  • 操作系统概述
  • 记录重启csdn
  • 蓝牙耳机哪个品牌质量最好最耐用?蓝牙耳机排行榜10强推荐
  • mysql 双主架构详解
  • 计算机指令系统基础 - 寻址方式详解
  • React Three Fiber动画入门
  • 为什么我推荐你使用 systemd timer 替代 cronjob?
  • elasticsearch基础6——head插件安装和web页面查询操作使用、ik分词器
  • 【Linux】七、进程间通信(二)
  • Synchronized学习大总结