剑指offer(31)—整数1出现的次数
来源:互联网 发布:赵薇事件公知 编辑:程序博客网 时间:2024/06/07 10:50
题目描述
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
思路
1、暴力求解法:依次求出1~n的每个数中所含的1的个数,通过对10取余判断个位数是否为1来计算;
2、分析数据找规律,举例分析,以21345为例。
代码
class Solution {public: int PowBase10(int n){ //10^n int res = 1; for(int i = 0; i < n; i++) res *= 10; return res; } int NumOf1(char *str){ if(!str || *str<'0' || *str>'9' || *str=='\0') //特殊情况处理 return 0; int first = *str-'0'; int len = strlen(str); if(len==1 && first ==0) //0 return 0; if(len==1 && first > 0) //1~9 return 1; int numFirstDigit = 0; //第一位中1的数目 if(first > 1) numFirstDigit = PowBase10(len - 1); else if(first == 1) numFirstDigit = atoi(str+1) + 1; int numOtherDigits = 0; //其他位中1的数目 numOtherDigits = PowBase10(len-2) * first * (len - 1); int numRecursive = NumOf1(str+1); return numFirstDigit + numOtherDigits + numRecursive; } int NumberOf1Between1AndN_Solution(int n) { if(n<=0) return 0; char str[50]; sprintf(str,"%d",n); return NumOf1(str); }};
阅读全文
0 0
- 剑指offer(31)—整数1出现的次数
- 剑指offer——整数中1出现的次数
- 剑指offer—整数中1出现的次数
- 剑指Offer——(31)整数中1出现的次数(从1到n整数中1出现的次数)
- 剑指Offer—31—整数中1出现的次数(从1到n整数中1出现的次数)
- 【剑指offer】整数中1出现的次数
- 剑指offer 32 整数中1出现的次数
- 【剑指offer】整数中1出现的次数
- 【剑指offer】之整数中1出现的次数
- 剑指offer - 整数中1出现的次数
- 剑指offer-整数中1出现的次数
- 剑指offer-整数中1出现的次数
- 【剑指offer】整数中1出现的次数
- 剑指offer-整数中1出现的次数
- 剑指offer 32 整数中1出现的次数
- 剑指offer第31题(整数中1出现的次数)
- 剑指offer 面试题32—从1到n整数中1出现的次数
- 剑指offer——31.整数中1出现的次数
- 顺序表应用3:元素位置互换之移位算法
- 深入理解计算机系统(1.1)------Hello World 是如何运行的
- Zookeeper的可靠性是怎么保证的?
- [NOI 2008] 志愿者招募
- 浅谈继承和多态
- 剑指offer(31)—整数1出现的次数
- hadoop scheduler.capacity queues 配置
- 解决给div中添加文字后位置发生偏移的问题
- 图片上传拦截器配置
- 图片操作异常 ImageIO: CGImageReadCreateDataWithMappedFile 'open' failed
- Oracle日期、字符串格式化函数,位数不足前面加0,一位数字显示两位,格式化数字为定长
- CentOs6.5虚拟机的创建
- 关于JavaScript函数的参数按值传递而不是按引用传递的分析
- 169. Majority Element