《剑指offer》第四十三题(从1到n整数中1出现的次数)

// 面试题43:从1到n整数中1出现的次数
// 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如
// 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。

#include <iostream>
#include <cstring>
#include <cstdlib>// ====================方法一====================
//逐个判断,时间复杂度为O(nlogn),不好
int NumberOf1(unsigned int n);int NumberOf1Between1AndN_Solution1(unsigned int n)
{int number = 0;for (unsigned int i = 1; i <= n; ++i)number += NumberOf1(i);return number;
}int NumberOf1(unsigned int n)
{int number = 0;while (n){if (n % 10 == 1)number++;n = n / 10;}return number;
}// ====================方法二====================
int NumberOf1(const char* strN);
int PowerBase10(unsigned int n);int NumberOf1Between1AndN_Solution2(int n)//把数字换成字符串,方便处理
{if (n <= 0)return 0;char strN[50];sprintf(strN, "%d", n);//格式化输出成字符串return NumberOf1(strN);
}int NumberOf1(const char* strN)
{if (!strN || *strN < '0' || *strN > '9' || *strN == '\0')return 0;int first = *strN - '0';//第一位的最大值unsigned int length = static_cast<unsigned int>(strlen(strN));//强制转换符if (length == 1 && first == 0)//边界特殊情况return 0;if (length == 1 && first > 0)return 1;// 假设strN是"21345"//先计算第一种情况,第一位为1的个数// numFirstDigit是数字10000-19999的第一个位中1的数目int numFirstDigit = 0;if (first > 1)numFirstDigit = PowerBase10(length - 1);else if (first == 1)numFirstDigit = atoi(strN + 1) + 1;//若在1xx的情况,个数不到PowerBase10(length - 1),atoi是字符串转整数//第二种情况,非第一位为1的个数// numOtherDigits是01346-21345除了第一位之外的数位中1的数目int numOtherDigits = first * (length - 1) * PowerBase10(length - 2);//第一位可能性有first个,第二项表示选取除了第一位的任一位为1,剩下的有10种可能// numRecursive是1-1345中1的数目,使用迭代处理int numRecursive = NumberOf1(strN + 1);return numFirstDigit + numOtherDigits + numRecursive;
}int PowerBase10(unsigned int n)//10的n次方
{int result = 1;for (unsigned int i = 0; i < n; ++i)result *= 10;return result;
}// ====================测试代码====================
void Test(const char* testName, int n, int expected)
{if (testName != nullptr)printf("%s begins: \n", testName);if (NumberOf1Between1AndN_Solution1(n) == expected)printf("Solution1 passed.\n");elseprintf("Solution1 failed.\n");if (NumberOf1Between1AndN_Solution2(n) == expected)printf("Solution2 passed.\n");elseprintf("Solution2 failed.\n");printf("\n");
}void Test()
{Test("Test1", 1, 1);Test("Test2", 5, 1);Test("Test3", 10, 2);Test("Test4", 55, 16);Test("Test5", 99, 20);Test("Test6", 10000, 4001);Test("Test7", 21345, 18821);Test("Test8", 0, 0);
}int main(int argc, char* argv[])
{Test();system("pause");return 0;
}

 

转载于:https://www.cnblogs.com/CJT-blog/p/10522116.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回调函数

又称callback函数。意思是指&#xff1a;在你的程序中&#xff0c;被windows系统调用的函数。 这些函数虽然由你设计&#xff0c;但是永远不会也不该被你调用&#xff0c;它们是为windows系统准备的。 窗口函数设计为callback形式&#xff0c;才能开放出一个接口给操作系统调用…

固态硬盘Ghost安装Windows 10无法引导的问题

机器配置如下&#xff1a; 电脑型号 技嘉 B360M POWER 台式电脑操作系统 Windows 10 64位 ( DirectX 12 )处理器 英特尔 Core i7-8700 3.20GHz 六核主板 技嘉 B360M POWER ( 英特尔 PCI 标准主机 CPU 桥 - CannonLake - A3…

Linux shell 内部命令与外部命令有什么区别以及怎么辨别

内部命令实际上是shell程序的一部分&#xff0c;其中包含的是一些比较简单的linux系统命令&#xff0c;这些命令由shell程序识别并在shell程序内部完成运行&#xff0c;通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的&#xff0c;其…

[转]矩阵分解在推荐系统中的应用

矩阵分解是最近几年比较火的算法&#xff0c;经过kddcup和netflix比赛的多人多次检验&#xff0c;矩阵分解可以带来更好的结果&#xff0c;而且可以充分地考虑各种因素的影响&#xff0c;有非常好的扩展性&#xff0c;因为要考虑多种因素的综合作用&#xff0c;往往需要构造cos…

iPhone 系统刷机

1. 下载好固件(爱思 或者 pp助手) e.g. http://jailbreak.25pp.com/gujian/ 2. 将电脑与手机连接上&#xff0c;弹出iTunes软件即可 3. 长按手机电源键 关闭手机 4. 按住电源健&#xff0c;出现屏幕亮出现苹果标志后再按住Home健 5. 屏幕黑屏时松开电源健&#xff0c;继续按照H…

hdu4044

题意&#xff1a;给你一颗树有n个节点&#xff0c;树的根节点为1&#xff0c;表示为敌人的基地&#xff0c;其他叶子节点为你的基地&#xff0c;你一开始有m元&#xff0c;给你每个节点可以建造的塔的数量和塔的价格和可以照成的伤害&#xff0c;每个节点至多建立一座塔。敌人的…

RS100项目进展更新

1. 添加手机界面访问网页&#xff0c;毕竟PDA的屏幕大小和PC机大小不一致&#xff0c;完成了一自适应网页&#xff0c;便于在手机上观看实时画面&#xff1b; 2. 此项目为一个远程视频监控远程开关项目&#xff0c;远程PC机或者手机能操作到监控端的开关&#xff0c;所以在远程…

python os操作

1 # 常用的文件管理操作2 # https://www.cnblogs.com/dkblog/archive/2011/03/25/1995537.html3 import os4 import shutil5 6 # 切换工作目录,默认是在当前目录下7 # os.chdir("xx")8 9 # 当前的工作目录 D:\pythonworkspace\py_base\cn\tele\io 10 print(os.getcw…

洛谷模板,树状数组二 差分

题目链接&#xff1a;https://www.luogu.org/problemnew/show/P3368 先介绍下差分&#xff1a; 设数组a[]{1,6,8,5,10}&#xff0c;那么差分数组b[]{1,5,2,-3,5} 也就是说b[i]a[i]-a[i-1];(a[0]0;)&#xff0c;那么a[i]b[1]....b[i];(这个很好证的)。 假如区间[2,4]都加上2的话…

KMS安装后激活机器

slmgr /skms 192.168.26.82 slmgr /ato转载于:https://www.cnblogs.com/EllieSoft/p/3410320.html

Java内存模型深度解析:总结

处理器内存模型 顺序一致性内存模型是一个理论参考模型&#xff0c;JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松&#xff0c;因为如果完全按照顺序一致性模型来实现处理器和JMM&#xff0c;那么…

sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...

1、打开项目下.git/config文件&#xff0c;或者如下图操作&#xff1a; 2、打开config文件以后&#xff0c;删除所有 [gitflow *条目并保存文件 3、关闭并重新打开sourcetree 4、仓库-》Git 工作流-》初始化仓库即可转载于:https://www.cnblogs.com/yxfeng/p/10536955.html

关于a标签的href属性的注意事项

今天在做一个lightbox效果的时候出现了一个问题。 当往下滚动再点击按钮出现lightbox的时候&#xff0c;lightbox的遮罩层不能铺满&#xff08;即滚动高度处不能铺上&#xff09;&#xff0c;如下图所示。原因是提交按钮使用的是a标签&#xff0c;当给a标签写上href属性的时候&…

爬虫开发4.三种数据解析方式

数据解析三种方式引言&#xff1a;回顾requests实现数据爬取的流程 指定url基于requests模块发起请求获取响应对象中的数据进行持久化存储其实&#xff0c;在上述流程中还需要较为重要的一步&#xff0c;就是在持久化存储之前需要进行指定数据解析。因为大多数情况下的需求&…

在mac上安装gitlab

参考链接&#xff1a; https://www.cnblogs.com/floodwater/p/10138265.html 注意事项&#xff1a; 在安装gitlab-ce时&#xff0c;配置hostname域名后&#xff0c;通过域名访问gitlab时&#xff0c;需要配置本机hosts文件&#xff0c;不然不能访问 本地hosts文件中配置后 就可…

org.apache.maven.archiver.MavenArchiver.getManifest错误

org.apache.maven.archiver.MavenArchiver.getManifest错误 网上普遍要add&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 正解&#xff1a; 接到一个新需求&#xff0c;开始搭建项目时遇到了如标题错误。查询网络普遍得到是更新maven插件版本。 之前已安装过此…

d3.js 入门指南

说到数据可视化&#xff0c;我们会行到很多优秀的框架&#xff0c;像echarts、highcharts&#xff0c;这些框架很优雅&#xff0c;健壮&#xff0c;能满足我们对可视化的大部分需求&#xff0c;但是缺点也很明显&#xff0c;就是这些框架几乎是不可定制化的&#xff0c;当遇到特…

【LeetCode】200. 岛屿的个数

题目 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;计算岛屿的数量。一个岛被水包围&#xff0c;并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1:输入: 11110 110…

AI 模拟退火算法

模拟退火算法转载于:https://www.cnblogs.com/yangwenhuan/p/10548171.html

keep用法

keep 是英语中用法灵活的动词之一&#xff0c;下面笔者就其用法归纳如下&#xff1a; 一、用作系动词&#xff0c;意为“保持&#xff08;某种状态&#xff09;”&#xff0c;其后常接形容词作表语。如&#xff1a; Please keep quiet / silent! 请保持安静&#xff01; Aft…