面试题32:在从1到n的正数中1出现的次数
2016-05-04 22:05
399 查看
1、方法一:
2、方法二
使用递归的思路
class Solution1 { public: int NumberOf1OfN(int n) { int cnt=0; while(n!=0){ if(n%10==1){ cnt++; } n=n/10; } return cnt; } int NumberOf1Between1AndN_Solution(int n) { int cnt=0; for(int i=1;i<=n;i++){ cnt+=NumberOf1OfN(i); } return cnt; } };
2、方法二
使用递归的思路
class Solution2 { public: int numberof1(char* strN) { int first_digit=*strN-'0'; int len=strlen(strN); if(len==1 && 0==first_digit){ return 0; }else if(1==len && first_digit>0){ return 1; } int num_recursive=numberof1(strN+1); int num_other=first_digit*(len-1)*pow(10,len-2); //乘以first_digit是因为,以2为例,可以取值0和2,是两个;以3为例,可以取值0,2,3,是三个; //1出现在第一位之外的其他位,其余的位数字在0到9这10个数字任意选择,由排列组合可以得出总次数 int num_first_digit=0; if(first_digit>1){ num_first_digit=pow(10,len-1); }else if(first_digit==1){ num_first_digit=atoi(strN+1)+1; } return num_first_digit+num_other+num_recursive; } int NumberOf1Between1AndN_Solution(int n) { if(n<=0){ return 0; } char strN[32]; sprintf_s(strN,"%d",n); return numberof1(strN); } };
相关文章推荐
- 初入职场3个月试用期总结
- 树的子结构
- 程序员跳槽的最佳时机选择
- 黑马程序员——Java语言基础(一)---关键字、标识符、注释、常量、变量、运算符
- kill 与 kill -9(面试中问道的知识点)
- 黑马程序员--02.Java语言基础--01.【关键字】【标示符】【常量】【变量】【运算符】
- hiho#1054 : 滑动解锁 (hiho模拟面试题2 - google在线技术笔试模拟)
- 面试题整理笔记(一)
- 面试题--Java线程面试题 Top 50
- 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
- 今天在群里看到一道面试题,做了两种解法
- 中级web前端面试题1
- 【笔试面试】75道逻辑推理题及答案
- 《java入门第一季》之面向对象面试题(面向对象都做了哪些事情)
- 《java入门第一季》之面向对象面试题(面向对象都做了哪些事情)
- 什么样的项目经历会让面试官眼前一亮
- OC 常见面试题以及答案
- 不要宅要养生--程序员健康生活指北
- 架构师害怕程序员知道的十项技能
- 剑指offer之面试题28:字符串的排列