【算法】【算法杂谈】从1到n的自然数组中,1出现的次数如何计算?
目录
- 前言
- 问题介绍
- 解决方案
- 代码编写
- java语言版本
- c语言版本
- c++语言版本
- 思考感悟
- 写在最后
前言
当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~
在此感谢左大神让我对算法有了新的感悟认识!
问题介绍
原问题
从1到n的自然数组中,1出现的次数如何计算?
如 [1…11] 中有1的有 1,10,11,结果为4
解决方案
原问题:
首先给一个示例:n = 114时,求[1…114]之间1的个数
首先我们求15 - 114之间1的个数,然后再求[1…14]之间1的个数,为什么这么来,可以看下面的感 1
15-114之间1的个数如何求?
1、首先百位是1时的数一共有14个,如果百位是2时,则百位是1的个数就是100-199,也就是 10^2个
2、其次求10位是1的个数,百位首先范围只能是1,如果百位是2,那么范围就是[1…2],按照除了十位和百位以外,其他的可以随便取,所以就是10^1个,如果百位是2就是 2 * 10^1个,
3、接下来算个位时同十位相同,那么这个时候你可能会问,个位时1时,十位难道不限制吗?哎,就是不用限制,为什么?看下面1
先看下代码怎么写,然后咱们讨论一下巧妙之处~
代码编写
java语言版本
原问题:
方法一:
/*** 二轮测试: 给定整数num,求1-num中1出现的次数* @param num* @return*/public static int oneNumCp1(int num) {if (num < 1) {return 0;}if (num < 10) {// 10以内的数只有一个1return 1;}// 计算位数int len = 0;int tem = num;while (tem != 0) {len ++;tem /= 10;}// 求起点tem = num;// 最高位int height = (int)(tem / Math.pow(10, len-1));// 当前轮的起点int start = (int)(tem - (height) * Math.pow(10, len-1)) + 1;// 计算当前层的1的个数int oneNum = 0;// 先计算最高位是1的情况if (height == 1) {// 最高位是1oneNum += start;}else {oneNum += Math.pow(10, len-1);}// 剩余的自由组合oneNum += Math.pow(10, len-2) * height * (len-1);return oneNum + oneNumCp1(start-1);}public static void main(String[] args) {System.out.println(oneNumCp1(114));}
c语言版本
正在学习中
c++语言版本
正在学习中
思考感悟
写在最后
方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!
首先这个答案可以解释上面两个疑惑:
为什么偏偏计算15-114呢?就是因为我们在计算个位(后面可能是低位)的时候,以为十位可能会被限制为1,不能为2,这样计算起来很麻烦,所以这里取巧了,将15-99的数字全部加载114的后面,这样就凑齐了100-199,这样计算个位就不会被10位限制,很显然后续的计算直接计算1-15,也不会再计算15-99了。
2、现在114并不典型,我们需要注意一下214的情况:
214的解法仍然是求15 - 214先,我们发现15-99能够填充214到299,首先算十位是没有变化的(注意十位是1时百位是2时,219等价于 019 )虽然219不存在,但是019能够作为代替,这也解释了为什么百位不能为1,只能是1-2的范围。
3、还有一个容易误会的地方就是刚开始我会觉得当十位是1的时候,个位会有1的时候,那么计算个位1的时候十位也会有1的时候,是否会有重复?
这里是一个理解误区,我们在计算1的个数时,如果有一个数是111,那么这个数应该被计数三次才对,很显然我们在排列组合的时候会计算三次,完全没有问题! ↩︎ ↩︎
相关文章:
【算法】【算法杂谈】从1到n的自然数组中,1出现的次数如何计算?
目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介…...
日常笔记-Flutter build命令参数
Flutter build命令参数 Flutter build命令参数 Flutter build命令参数 flutter build apk 命令支持以下参数: --debug:构建一个调试版本的 APK。--release:构建一个发布版本的 APK。--target-platform<value>:指定目标平台…...
【利用AI让知识体系化】入门Koa框架
思维导图 文章目录 思维导图一、介绍Koa什么是KoaKoa的历史Koa的特点 二、基本使用安装KoaHello World中间件路由错误处理 三、进阶使用静态资源管理Session管理文件上传表单处理HTTPS支持 四、Koa中间件中间件的概念Koa的洋葱模型常用中间件的介绍自定义中间件的编写 五、异步…...
边缘计算:数据采集、清洗与处理的新时代
近日,又一家边缘计算企业成功获得了融资。这家公司名为DeepWalk,致力于提供边缘计算技术,为企业提供安全、快速的数据采集、清洗和处理解决方案。其融资将用于产品研发和市场推广。 DeepWalk成立于2018年,总部位于美国硅谷&#x…...
分区计量管理项目应用
为充分发挥分区计量管理项目在漏损控制的效用,应构建科学完备的应用体系,如下图 分区计量应用体系 1. 基于水量平衡分析的漏损现状评估方法 分区计量管理项目通过监控分析DMA 分区内流量、压力、水质、大用户用水等情况,结合营业抄收系统的营…...
LayoutInflater中inflate()参数解析
1、关于LayoutInflater,它是如何通过 inflate 方法获取到具体View的? 获得LayoutInflater实例的方式有以下三种: LayoutInflater inflater getLayoutInflater();LayoutInflater inflater LayoutInflater.from(this);LayoutInflater infla…...
星河案例ㅣ中国电信 X 冲量在线:基于智算中心的隐私计算应用实践
▏摘要 中国电信是中国三大运营商之一,为响应国家“东数西算”工程的全新数据中心形态,中国电信引入隐私计算平台,对内实现数据确权跟踪、对外实现数据共享交易,盘活中国电信分布在全国不同区域的数据资源和算力资源,…...
开发笔记之:JAVA读取QT QDataStream输出
1.背景 之前的标题是【JAVA反序列化QT序列化内容】,觉得太大太绕,最后改为现在的标题。 本篇内容是对用JAVA解析QT(用的是QDataSteam)所输出(序列化)的内容的小结。 本文涉及类型包括:QString…...
Docker入门实战---修改Docker镜像源
前言 现在大部分互联网公司在实施项目时几乎都会以微服务架构进行落地,那么微服务一旦多了之后就会面临一个如何友好的治理的问题,本人不会重点介绍治理的问题,而是会简单就治理的其中一个环节服务部署运维的问题进行介绍,服务部…...
Java构建高并发高可用的电商平台(静态架构蓝图之剖析架构)
静态架构蓝图 整个架构是分层的分布式的架构,纵向包括CDN,负载均衡/反向代理,web应用,业务层,基础服务层,数据存储层。水平方向包括对整个平台的配置管理部署和监控。 剖析架构 1. CDN CDN系统能够实时…...
SpringBoot核心运行原理解析之------@Conditional条件注解
在SpringBoot核心运行原理解析之------@EnableAutoConfiguration文档中我们完成了自动配置类的读取和筛选,在这个过程中已经涉及了像@ConditionalOnClass这样的条件注解。打开每个自动配置类,都会看到@Conditional或其衍生的条件注解,本节我们来认识下@Conditional注解。 认…...
systemverilog 001 内建数据类型logic
Verilog 有两种基本数据类型,reg 和wire ,都是4值逻辑 0 1 x z,默认值是x。 reg[7:0] m 为无符号 Integer 为有符号32位 time为64位无符号 real为浮点数 systemverilog新引进了logic,logic既可以作为变量(reg功能),也可以作为线网功能(…...
Flink Kafka-Source
文章目录 Kafka Source1. 使用方法2. Topic / Partition 订阅3. 消息解析4. 起始消费位点5. 有界 / 无界模式6. 其他属性7. 动态分区检查8. 事件时间和水印9. 空闲10. 消费位点提交11. 监控12. 安全 Apache Kafka 连接器 Flink 提供了 Apache Kafka 连接器使用精确一次…...
VoxelNeXt:用于3D检测和跟踪的纯稀疏体素网络
VoxelNeXt:Fully Sparse VoxelNet for 3D Object Detection and Tracking 目前自动驾驶场景的3D检测框架大多依赖于dense head,而3D点云数据本身是稀疏的,这无疑是一种低效和浪费计算量的做法。我们提出了一种纯稀疏的3D 检测框架 VoxelNeXt。该方法可以…...
必须了解的内存屏障
目录 一,内存屏障1,概念2,内存屏障的效果3,cpu中的内存屏障 二,JVM中提供的四类内存屏障指令三,volatile 特性1,保证内存可见性定义2,禁止指令重排序3,不保证原子性 一&a…...
【设计模式】状态模式
文章目录 前言状态模式1、状态模式介绍1.1 存在问题1.2 解决问题1.3 状态模式结构图 2、具体案例说明状态模式2.1 不使用状态模式2.2 使用状态模式 3、状态模式总结 前言 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示…...
内核驱动支持浮点数运算
最近在调 iio 下的 ICM42686 驱动,因项目求需要在驱动对加速度和陀螺raw数据进行换算,避免不了浮点运算。内核编译时出现了报错,提示如下: drivers/iio/imu/tdk_icm42686/icm42686.o: In function gyro_data2float: /home/share/…...
Flink学习(一)
分布式计算框架 Java可以使用分布式计算来处理大规模的数据和计算任务,提高计算效率和性能。以下是一些Java分布式计算的例子: Apache Hadoop:Hadoop是一个开源的分布式计算框架,可以处理大规模数据集的分布式存储和处理。它使用Java编写,可以在分布式环境中运行MapReduc…...
linux 常用命令awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 AWK用法 awk 用法:awk pattern {action} files 1.RS, ORS, F…...
MySQL学习---15、流程控制、游标
1、流程控制 解决复杂问题不可能是通过一个SQL语句完成,我们需要执行多个SQL操作。流程控制语句的作用就是控制存储过程中SQL语句的执行顺序,是我们完成复杂操作必不可少的一部分。只要是执行的程序,流程就分为三大类: 1、顺序结…...
2026届学术党必备的十大降AI率神器实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能技术能够明显地提高开题报告撰写的效率,它是基于自然语言处理以及学术知…...
企业官网设计那个最好?怎么才能融入品牌文化的视觉设计与前端落地
企业官网设计:如何通过视觉设计与前端技术深度融入品牌文化 企业官网设计不仅是信息窗口,更是品牌文化的立体化载体。优秀的官网设计需实现美学表达、用户体验与品牌内核的三维统一,本文将系统解析设计策略与落地路径。 推荐选择https://ww…...
rk3588s的firfly的linux的sdk版本
1、SDK的解压和更新 # 解压 mkdir -p ~/proj/rk3588_sdk cd ~/proj/rk3588_sdk cat path/to/rk3588_linux_release_20230114_v1.0.6c_0* | tar -xv# 导出数据 .repo/repo/repo sync -l#更新sdk数据,例如编译ubuntu就会无法烧录,因为SDK版本的问题cd ~/pr…...
macOS光标个性化终极指南:如何用Mousecape打造专属高效工作流
macOS光标个性化终极指南:如何用Mousecape打造专属高效工作流 【免费下载链接】Mousecape Cursor Manager for OSX 项目地址: https://gitcode.com/gh_mirrors/mo/Mousecape 在macOS的视觉交互体验中,鼠标指针作为我们与数字世界最直接的连接点&a…...
如何使用Apache Shiro实现企业级密码安全:完整配置指南
如何使用Apache Shiro实现企业级密码安全:完整配置指南 【免费下载链接】shiro Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management 项目地址: https://gi…...
Aseprite进阶指南:从像素瓦片到Unity动态Tilemap实战
1. 像素瓦片素材的规范设计 在开始使用Aseprite绘制像素瓦片之前,我们需要先明确一些基本规范。这些规范不仅关系到后续在Unity中的使用效果,更直接影响游戏地图的整体表现和性能优化。 首先说说尺寸问题。我强烈建议使用16x16像素作为基础单位ÿ…...
多线程的了解
文章目录1. 进程2. 线程3. 并发和并行1)并发2)并行3)对比4. java多线程1)概述2)多线程的实现方式3)Thread中常用方法4)线程安全问题5)同步代码块6)同步方法7)…...
Linux上免费运行Photoshop CC的终极解决方案:3个简单步骤实现专业图像编辑
Linux上免费运行Photoshop CC的终极解决方案:3个简单步骤实现专业图像编辑 【免费下载链接】Photoshop This program written in C will help you to automatically install everything you need and configure it so that you can run Photoshop on your Linux wit…...
SPSS单因素方差分析保姆级教程:从数据导入到三线表输出
SPSS单因素方差分析实战指南:从数据清洗到三线表制作 第一次打开SPSS时,面对密密麻麻的菜单和输出表格,大多数研究者都会感到无从下手。单因素方差分析作为最常用的统计方法之一,在心理学、教育学、医学等领域的研究中几乎无处不在…...
【2026奇点智能技术大会权威内参】:AIAgent强化学习的5大落地陷阱与企业级避坑指南
第一章:2026奇点智能技术大会:AIAgent强化学习 2026奇点智能技术大会(https://ml-summit.org) 核心范式演进:从监督微调到在线策略优化 本届大会首次将AIAgent的强化学习训练流程标准化为“感知-决策-执行-反思”四阶段闭环。与传统RLHF不同…...
