首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

整数1出现次数(从1到n整数1出现次数)_31

1.总结规律 思路: 1.对于整数n,我们将这个整数分为三部分:当前位数字cur,更高位数字high,更低位数字low,:对于n=21034,当位数是十位时,cur=3,high=210,low=4。...我们从个位到最高位 依次计算每个位置出现1次数: 1当前位数字等于0时,例如n=21034,在百位数字cur=0,百位上是1情况:00100~00199,01100~01199,……,20100...3)当前位数字大于1时,例如n=21034,在十位数字cur=3,十位上是1情况:00010~00019,00110~00119,……,21010~21019。...(包括求1~n所有整数2,3,4,5,6,7,8,9出现所有次数) 通过使用一 位置乘子m 遍历数字位置, m 分别为1,10,100,1000…etc....(m<=n) 对于每个位置来说,把10进制数分成两部分,比如说 当m=100时候, 把十进制数 n=3141592 分成 a=31415 b=92 ,以此来分析百位数为1时所有数个数

92510

【leetcode】43.1~n整数1出现次数

【题目】1~n整数1出现次数 输入整数 n ,求1~n这n整数十进制表示1出现次数。 例如输入12,1~12这些整数包含1 数字1、10、1112,1一共出现了5次。...示例 1: 输入:n = 12 输出:5 示例 2: 输入:n = 13 输出:6 【限制】 1 <= n < 2^31 1.暴力法 【思想】暴力解法就是遍历一遍每个数字,然后把每个数字 1 数目加起来...那么高位从0~ 49变化过程,每一变化1出现10次,即(高位10)~(高位19)这样数字; 高位为50时候,因为当前位是1,所以我们要看低位来决定出现次数,因为低位为4,所以此时出现5次...【结论】 我们假设高位为high,当前位为cur,低位为low,i代表着需要统计位置数(1对应个位,10对应十位,100对应百位),则对每一位个数count: cur=0,count = high...,i=1即个位,i=10十位,...

98620
您找到你想要的搜索结果了吗?
是的
没有找到

再谈基数排序-分治思想:对比计数|基数|桶|堆|希尔|快速|归并

N是特定,然后把数组每一项数字num放到 num/[(max-min+1)/N]并对桶数据排序,然后按桶序依次取数基数排序,比如三位以内数组,那么,就 个位、十位百位分组(逻辑桶),然后先百位对数据排序...4桶,标记为不同花色,然后把13标记为数字扑克牌依次放进这些桶内,最终我们可以不通过比较数字大小花色,就可以得到排序结果了。...基数排序算法解析:基数排序思想就是先排好各位,然后排好各位基础上排十位,以此类推,直到遍历最高位 次,排序结束基数排序不是比较排序,而是通过分配收集过程来实现排序初始化10桶(固定),桶下标为...0-9通过得到待排序数字十百等位数字,把这个数字对应item放到对应基数排序动画gif动画演示基数排序两种排序方式:LSDMSD,最小位优先(从右边开始)最大位优先(从左边开始)最高有效位...如果词典排序用于表示可变量长度整数,例如从1到10 数字,输出将表示为1, 10, 2, 3, 4, 5, 6, 7, 8, 9。

28020

数学十大速算技巧

二、巧妙运用“首同末合十”   利用“首同末合十”方法来训练。“首同末合十”法是两两位数,它们十位数相同,而个位数相加10。...六、数字颠倒两、三位数减法巧算   形如73与37、185与581等数称为“数字颠倒”两、三位数,巧算方法为:   1.数字颠倒两位数减法,可用两位数字大数减去小数,再乘以9,积就是它们差...九、用“两边拉中间加”方法速算   任何数同11相乘,只要把原数个位移到积个位位置,最高位移到积最高位位置,中间数分别是个位上数加十位就是十位十位数加百位就是百位…...…如果相加满十要向前一位数进1。...十、用“十加减法”速算   “十加减法”就是任何两位数加上9,可以把这个两位数变成十位加1位减1数,即36+9=45,17+9=26。这种计算技巧适合低年级小学生。

1.7K20

C++版 - 剑指offer 面试题32:从1到n整数1出现次数(leecode233. Number of Digit One) 题解

tpId=13&tqId=11184 题目: 输入整数n,求从1到n这n整数十进制表示1出现次数。 例如输入12,从1到12这些整数包含1数字1,10,11,12。...分析: 可以用统计学方法来计算,假设从个位开始,每次假设某一位数字是1,然后统计剩下位数数字满足条件可能情况数。其时间复杂度为O(log n)....考虑把某一数字设成1后,分析他位置多少种选择。然后把每个数字位取1而有的选择都加起来就可以了。...将输入整数n分割成3部分:当前位之前部分front, 当前位curDigit当前位之后部分back....然后来分析其他位置多少种选择: (1) 如果将n个位数置为1,xxx1 该位数字置1之前为0, card({000, 001...134}),满足条件数共有135 (2) 如果将n十位数置为

59720

java完善程序题_JAVA 程序题

9.输入整数,求这个整数每位数字相加  10.编写一java应用程序,要求如下:  (1)声明一String类变量并初始化值“Hello World”。  ...14.程序功能:求能被3整除且至少有一位数字为5三位数个数。  15.程序功能:求三位奇数,个位数字十位数字之和除以10所得余数是百位数字个数。  16.解百马百瓦古题。...20.程序功能:一两位数正整数,如果将其个位数与十位数字对调所生成数称为其对调数,28是82对调数。...31.程序功能:设某四位数千位数字十位数字等于百位数字与个位数字积,例如,对于四位数:9512,9+1=5*2,求所有这样四位数之和。  ...81.求三位数,个位数字十位数字之和除以10所得余数是百位数字,且百位数字是偶数个数。  82.一素数称之为超级素数,若该素数依次去掉个位,十位,...等等,每次所得数仍然是素数。

1.6K20

python输入水仙花数(三位数) 输出百位十位位实例

# python输入水仙花数(三位数) 输出百位十位位 """ 从控制台输入三位数num, 如果是水仙花数就打印num是水仙花数, 否则打印num不是水仙花数 """ """ 任务: 1、定义变量...num用于存放用户输入数值 2、定义变量gw、sw、bw分别用于存放输入三位数个位,十位百位 3、定义变量total,用于存放各位数字立方 4、用if语句判断各位数字立方是否等于该本身 5、...例如输入153,因为153=1^3+5^3+3^3,所以153是一水仙花数。...补充知识:python求一三位数个位十位百位值 定义一三位数 a = 123456789 百位数: a//100%10 十位数: a//10%10 个位数: a//1%10 取倒数第几位,就是...a//位数%10 以上这篇python输入水仙花数(三位数) 输出百位十位位实例就是小编分享给大家全部内容了,希望能给大家一参考。

1.4K10

详解基数排序算法

给定一数组 arr = [ 6, 56, 89 , 12 ,39 ,21,11,156,657 ]; 初始状态如下: 初始状态 按照个位装桶 十进制每位数字都是从0-9,所以我们分配10桶,每个桶一定容量...按照十位装桶 10十位数字是1; 21十位数字是2; 12十位数字是1; 6十位数字是0; ......如此将它们按照十位数字进行装桶如下: 按照十位进行装桶 然后再按照这个顺序放回原数组如下: [ 6,11 ,12, 21,39,56,156,657,89]; 如下图 按照十位数字放回原数组 按照百位进行装桶...等等 按照百位进行装桶如下: 按照百位装桶 再按照百位放回原数组如下: [ 6,11 ,12, 21,39,56,89,156,657]; 如下图: 按照百位放回数组 此时从最低为到最高位都已经装桶放回完毕...//123 取出十位数字是123 / 10 % 10; //123 去除百位数字是123 /100 % 10 //以此类推 for (int

69320

No.012 Integer to Roman

按照下述规则可以表示任意正整数。需要注意是罗马数字没有“0”,与进位制无关。一般认为罗马数字只用来记数,而不作演算。 重复数次:一罗马数字重复几次,就表示这个数几倍。...方案一     从根据红色标红规则,我们知道在十百千每一位数值肯定是只与对应位上表达形式有关,而不会牵扯到前一位或后一位上。...eg:在十位表达上有X、XX、XXX、XL、L、LX、LXX、LXXX、XC,而个位百位对应表达也都有对应,完全不会影响到十位上对应表达。...所以,就是直接列举出个十百千每一位表现形式,然后我们计算每一位数值,用对应字符串去填充就可以了,特殊一点事罗马数没有数值0,所以我们给其对应为空字符串表示。...所以:   【罗马数字】     个位上0~9: {"","I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};     十位0~9:

56290

统计0到n之间1个数(经典,详解)

问题描述 给定一十进制整数N,求出从1到N所有整数中出现”1”个数。 例如:N=2时 1,2出现了1 “1” 。 N=12时 1,2,3,4,5,6,7,8,9,10,11,12。...return 0; 23 } 该算法时间复杂度为O(N*lgN) (注:此方法对较大数据有可能会TL) 解法二  1位数情况: 在解法二已经分析过,大于等于1时候,1,小于1就没有...2位数情况: N=13,个位数出现1次数为2,分别为111,十位数出现1次数为4,分别为10,11,12,13,所以f(N) = 2+4。...由此我们发现,个位数出现1次数不仅个位数有关,十位数也有关,如果个位数大于等于1,则个位数出现1次数为十位数字加1;如果个位数为0,个位数出现1次数等于十位数字。...而十位数上出现1次数也不仅十位数相关,也个位数相关:如果十位数字等于1,则十位数上出现1次数为个位数数字加1,假如十位数大于1,则十位数上出现1次数为10

1K80

【算法知识】详解基数排序算法

初始状态 按照个位装桶 十进制每位数字都是从0-9,所以我们分配10桶,每个桶一定容量(本文将设定为数组长度大小); ?...按照各位放回原数组放回原数组 按照十位装桶 10十位数字是1; 21十位数字是2; 12十位数字是1; 6十位数字是0; ... 如此将它们按照十位数字进行装桶如下: ?...按照十位数字放回原数组 按照百位进行装桶 6百位是0; 11百位是0; 12百位也是0; 同理21,39,56百位都是0; 156百位是1; ... 等等 按照百位进行装桶如下: ?...,表示10桶, 每个桶就是一一维数组 int[][] bucket = new int[10][arr.length]; //每个桶存入了几个数字 int...//123 取出十位数字是123 / 10 % 10; //123 去除百位数字是123 /100 % 10 //以此类推 for (int

72240

PAT(乙级)1002

写出这个数 (20) 读入一自然数n,计算其各位数字之和,用汉语拼音写出一位数字输入格式:每个测试输入包含1测试用例,即给出自然数n值。这里保证n小于10^100。...输出格式:在一行内输出n各位数字之和一位,拼音数字1 空格,但一行中最后一拼音数字后没有空格。...因此考虑将数字保存为字符串形式。当我们计算每一位数字之和时候,就将字符形式数字转换为整形数字。...由于n小于10^100,当每一位数字取9,并且n取10^100时,这个时候数字将会有101(1后面1000),所以计算得到各位数字之和为:9×101=909,因此,这个数字使用int保存足以。...至于显示为汉语拼音,则使用数组保存0~9这10拼音即可。将三位分解出来,分别去匹配汉语拼音即可。大致思路就是这样。下面上代码。

38420

【面试算法题】水仙花算法题详解

算法题目 题目:打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一三位数,其各位数字立方等于该数本身。例如:153是一 “水仙花数 “,因为153=1三次方+5三次方+3三次方。...算法分析 根据题目分析,水仙花是三位数是 个位+十位+百位 自身次方等于该数本身,那么计算一数是否是水仙花数要将这个数 个位数 十位百位数给分解出来伪代码如下: a = i/100;...//获取3位数中百位数 b=i%100/10; //获取3位数十位数 c=i%100%10; //获取3位数个位数 这样就可以通过循环来过滤出一区间水仙花数量了...b=start%100/10; //获取3位数十位数 c=start%...100%10; //获取3位数个位数 a = a * a * a;

93820

PTA 7-1 数字加密

7-1 数字加密 输入四位数,将其加密后输出。方法是将该数每一位数字加9,然后除以10取余,做为该位上数字,最后将千位十位数字互换,百位个位上数字互换,组成加密后新四位数。...例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。 输入格式: 输入在一行给出一四位整数x,即要求被加密数。...输出格式: 在一行按照格式“The encrypted number is V”输出加密后得到新数V。...stdio.h> int main(void) { int n,i,num[4]={},nums=1; scanf("%d", &n); for (i=1;i<4;i++){ nums=nums*10...; num[i]=(n/nums)%10; } num[0]=n%10; int j,k; for(j=0;j<4;j++){ num[j]+=9; num[j]=num[j]%10

19410

贴片电阻符号表示_怎样识别贴片电阻阻值

贴片电阻基本参数标称阻值、额定功率、误差级别、最高电压、温度系数等,但在实际使用,只需关注标称阻值额定功率值这两项参数就可以了。...主要有三位表示四位表示两种方法 三位表示:前2位数字分别为十位、个位值,称为有效数值,第3位数字10X次方,误差值在+-%5。...标注为“152”,即为1500Ω;标注为“101”,即为100Ω;标注为“103”,即为10000Ω(10 kΩ) 若标注带有字母“R”该“R”表示小数点(单位是Ω),...另外,如果是两位数字之后有R按照下面的标注法标注 四位表示: 前3位为有效值,分别表示千位、百位个位值,第4位表示10X次方,误差值在+-%1 例如标注为“1501”,即为1500Ω;标注为...数字与字母含义要查询图标,标注为“01A”,则表示阻值为100Ω;标注为“02C”,则表示阻值为100kΩ。

1.1K20

零基础学Python之42:水仙花数

今天解决Python初学者经常会遇到一道练习题: 请打印所有的水仙花数,所谓水仙花数,是指这样3位数,它每个位上数字3次方之和等于它本身,例如:153就是一水仙花数,因为:1^3 + 5^...直接解法 遇到这样问题, 需要尝试用《怎样解题》办法将问题简化分解成这样一些子问题,当把这些子问题都解决之后,整个问题也就迎刃而解: 求出某个数m在个位、十位百位数字 求出某个数m在每个位上数字...3次方之和 列出所有的三位数 第一步,求一3位数在个位、十位百位数,可以用除法取余解决。...10) 再改一下,先用字符串函数求出数字位数n,再把个位、百位、千位等等都求出来: m = 1634 n = len(str(m)) digits = [(int(m / (10 ** i))...我这里给出一简单优化思路,程序求取n次方数学运算比较花时间,可以把这些数值提前保存在字典,以后直接查表即可,这样程序从110秒优化到55秒,快了一倍。

2.3K21

LeetCode笔记:66. Plus One

大意: 给出一非负数代表数字数组,给这个“数字”加一。 这个数字存储形式为最高位数再数组最前端。...思路: 但看题目还看不懂是什么意思,跑了几个测试用例后看答案看明白了,就是数组每一位置代表一一位个位十位百位等,[8]表示数字8,[1,2]表示数字12等等,题目要求将给出数字代表数字加一并用同样形式返回结果...这个题目的要点在于对加法进位判断,从个位数开始,如果加一后等于10,那么就要进位,而进位时也要不断对高位进行判断是否还要进位,所以只要把这个逻辑理清楚,代码还是好写出来,我自己写出来代码很复杂,明显可以进行优化...if (position == 0) {// 只有一数 // 在第0位插入一数 int[] newDigits = new...} digits = newDigits; break; } else {// 多位数

14510

【组合数学】基本计数原则 ( 加法原则 | 乘法原则 )

2 + 4 = 10 ; ---- ( 3 ) 习题 3 ( 乘法原则 ) 题目 : 从 1000 到 9999 整数 : ① 含有5多少 ; ② 含有多少 百位 十位数...均为 奇数 偶数 ; ③ 各位数 都不相同 奇数 多少; 解答 : ( 1 ) 含有 5 个数 : ① 设 数字 集合 \{ 0, 1, 2, 3, 4, 5, 6, 7, 8...方案数 : \{1 , 2, 3, 4, 5, 6, 7, 8, 9\} , 9 种方案 ; 根据 乘法 原则 : 百位 十位 均为 奇数 偶数 9 \times 5 \times...百位数 如果不做限制的话 , 10 种方案数 \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9 \} , 千位 与 个位 各自 取了 一位数 , 那么只能下 8 种 方案数...; 4> 分析 十位 数取值 : 十位数 如果不做限制的话 , 10 种方案数 \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9 \} , 千位 , 个位 与 百位 各自 取了

89340
领券