题目来源: JZ43 整数中1出现的次数(从1到n整数中1出现的次数)
题目描述:
- 描述: 输入一个整数 n ,求 1~n 这 n 个整数的十进制表示中 1 出现的次数
- 例如, 1~13 中满足题目条件,包含 1 的数字有 1 、 10 、 11 、 12 、 13 因此一共出现了 6 次
- 注意:11 这种情况是算两次
数据范围: 1≤n≤30000
示例1:
输入:13
返回值:6
示例2:
输入:0
输出:0
思路:暴力
- 因为该题目要求我们求得是整数中1出现的次数,所以我们除了需要遍历整数1到n之间的每一个数字,而对每一个数字,我们也是需要进行操作的
- 对每一个数字单独遍历它的每一位,检查是否是1,很明显这个方法是10进制的检查,所以我们可以用每一个数字对10进行除法以及进行取余的操作,分别对每一个位数进行检查,如果是1的话,则满足条件,那么就进行计数。
- 具体做法:
- 1.首先,我们要从整数1开始遍历到整数n,对每一个数字进行检查
- 2.通过每个数字对10进行
取余的操作以及除法的操作,我们就可以实现对每个数字的每一位进行检查的目的,确定是否为1
具体实现:
import java.util.*;
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
int res = 0;
//遍历1-n
for(int i = 1; i <= n; i++){
//遍历每个数的每一位
for(int j = i; j > 0; j = j / 10){
//遇到数字1计数
if(j % 10 == 1)
res++;
}
}
return res;
}
}
复杂度分析:
- 时间复杂度:O(nlog10n),外循环一共循环n次,内循环最大循环次数不会超过最大数字n的位数即log10n
- 空间复杂度:O(1),常数级变量,无额外辅助空间使用
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 12 天,点击查看活动详情”