重庆做的好的房产网站好,创世做的网站源码,免费软件版免费下载,海外网站cdn加速前言众所周知#xff0c;《剑指offer》是一本“好书”。如果你是个算法菜鸡#xff08;和我一样#xff09;#xff0c;那么最推荐的是先把剑指offer的题目搞明白。对于剑指offer题解这个系列#xff0c;我的写作思路是#xff0c;对于看过文章的读者#xff0c;能够做到…前言众所周知《剑指offer》是一本“好书”。如果你是个算法菜鸡和我一样那么最推荐的是先把剑指offer的题目搞明白。对于剑指offer题解这个系列我的写作思路是对于看过文章的读者能够做到迅速了解该题常见解答思路偏门思路不包括在内节省大家时间实在有研究需求的人可以查阅其它资料思路尽量贴近原书例如书中提到的面试官经常会要求不改变原数组或者有空间限制等尽量体现在代码中保证读者可以不漏掉书中细节尽量精简话语避免冗长解释给出代码可运行注释齐全关注细节问题代码能够通过牛客网在线编程《剑指offer》测试《剑指offer题解》系列你可以通过以下两种途径查看《剑指offer题解》系列关注我的公众号Rude3Knife点击公众号下方剑指offer题解剑指offer题解专栏(CSDN)题目介绍求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数为此他特别数了一下1 ~ 13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数从1 到 n 中1出现的次数。解题思路方法一:递归每个数字思路思路很简单写个for循环从1到n在循环体中判断这个数包含了多少个1复杂度O(nlogn)面试官不怎么开心呢。。方法二找规律思路思路解释参考https://www.nowcoder.com/profile/3371548/codeBookDetail?submissionId16319486设N abcde,其中abcde分别为十进制中各位上的数字。 如果要计算百位上1出现的次数它要受到3方面的影响百位上的数字百位以下低位的数字百位以上高位的数字。①如果百位上数字为0百位上可能出现1的次数由更高位决定。比如12013则可以知道百位出现1的情况可能是100 ~ 1991100 ~ 1199,2100 ~ 2199…11100 ~ 11199一共1200个。可以看出是由更高位数字12决定并且等于更高位数字12乘以 当前位数100。② 如果百位上数字为1百位上可能出现1的次数不仅受更高位影响还受低位影响。比如12113则可以知道百位受高位影响出现的情况是100 ~ 1991100 ~ 1199,2100 ~ 2199….11100 ~ 11199一共1200个。和上面情况一样并且等于更高位数字12乘以当前位数100。但同时它还受低位影响百位出现1的情况是12100~12113,一共114个等于低位数字1131。③ 如果百位上数字大于12 ~ 9则百位上出现1的情况仅由更高位决定比如12213则百位出现1的情况是100 ~ 199,1100 ~ 11992100 ~ 2199…11100 ~ 11199,12100 ~ 12199,一共有1300个并且等于更高位数字1121乘以当前位数100。代码public int NumberOf1Between1AndN_Solution(int n) {//1的个数int count 0;//当前位int i 1;int current, after, before;while((n/i)! 0){//高位数字current (n/i)%10;//当前位数字before n/(i*10);//低位数字after n-(n/i)*i;//如果为0,出现1的次数由高位决定,数量等于高位数字 * 当前位数if (current 0) {count before * i;} else if(current 1) {//如果为1,出现1的次数由高位和低位决定,高位*当前位低位1count before * i after 1;} else{//如果大于1,出现1的次数由高位决定,高位数字1* 当前位数count (before 1) * i;}//前移一位i i*10;}return count;
}
总结此题思考再三想分析作者为什么要出此题该题出现在优化时间和空间效率大类中作者主要是想让同学们运用逻辑推理想到时间上更优化的解法。《剑指offer题解》系列你可以通过以下两种途径查看《剑指offer题解》系列关注我的公众号Rude3Knife点击公众号下方剑指offer题解专栏剑指offer题解专栏(CSDN)关注我我是一名后端开发。主要关注后端开发数据安全爬虫等方向。微信yangzd1102Githubqqxx6661个人博客CSDNqqxx6661知乎Zhendong简书蛮三刀把刀掘金蛮三刀把刀原创博客主要内容Java知识点复习全手册Leetcode算法题解析剑指offer算法题解析SpringCloud菜鸟入门实战系列SpringBoot菜鸟入门实战系列Python爬虫相关技术文章后端开发相关技术文章个人公众号Rude3Knife如果文章对你有帮助不妨收藏起来并转发给您的朋友们~