算法: 整数中 1 出现的次数
问题
- 输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
解决
//1、打标法(数学归纳),通过某一位上面的规律推广到所有位
class Solution {
public int countDigitOne(int n) {
int cin=0; // 1出现的次数
//每10个数之间,个位上只出现1个1
//每100个数之间,十位上只出现10个1
//每1000个数之间,百位上只出现100个1
// 每一位上面出现1的个数是前一个位/10
//以1000上面百位的1为例 找出规律 ,k=100,n为输入数字
// (n/1000)*100+Math.min(Math.max(n%(1000)-100+1,0),100);
long mulk=1; // 进位操作
for(int k=0;mulk<=n;++k){
cin+=(n/(mulk*10))*mulk+Math.min(Math.max(n%(mulk*10)-mulk+1,0),mulk);
mulk*=10;
}
return cin;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程