目描述
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
题目链接:
分析:
归纳总结。每个位上的1分别记算。
例: 214
个位数上的1有 21 * 1 + 1
十位数上的1有 2*10 + 5
百位数上的1有0 *100 + 1
public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count = 0; int m = 1 ; //归纳总结 //214 // 个位数上的1有,21*1 + 1 // 十位数上的1有, 2*10 + 5 // 百位数上的1有, 0*100 + 1 while(n >= m){ count += (n/(m*10))*m; int nn = n%(m*10); if(nn >= 2*m){ count += m; }else if(nn < m){ }else{ count += nn - m +1; } m *= 10; } return count; /* 每个数计算含有1的数量 int count = 0; int pos = 1; while(pos <= n){ int x = pos; while(x >0){ if(x%10 == 1){ count++; } x/=10; } pos++; } return count; */ } }