题目描述
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
代码 暴力搜索
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
int count =0;
int length;
String temp ;
char[] digit;
for(int i=1; i<=n;i++ ){
temp = String.valueOf(i);
digit = temp.toCharArray();
for(int j=0; j<temp.length(); j++){
if(digit[j]=='1') count++;
}
}
return count;
}
}
按位计算
public class Solution {
public int NumberOf1Between1AndN_Solution(int n) {
// 个位,十位,百位,千位,单个统计计算
// dig表示 位数上的幂 个位为1, 十位为10,百位为100
// count 用来计数
int dig = 1,count = 0;
// 初始化当前位 cur ,high表示cur之前, low表示cur之后的位
int high = n/10,cur = n%10,low = 0;
while(high!=0||cur!=0){
if(cur==0) count += high*dig;
else if(cur==1) count += high*dig + low +1;
else count += (high+1) * dig;
low += cur * dig;
cur = high% 10;
high /= 10 ;
dig *=10;
}
return count;
}
}