剑指offer 刷题记录(31~40题)
转眼间就到了年末,前些天一直忙着论文投稿和开题报告。刷题都怠慢了,现在赶紧补上! 让我们用刷题来告别2019,用刷题来迎接2020!废话不多说,直接开始! 31.求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 最简单最直观的做法:一个个去判断,然后外层循环到n就行了。但是这样的做法效率很低。 //运行时间:6ms 占用内存:500k class Solution { public : int NumberOf1Between1AndN_Solution ( int n ) { int number = 0 ; if ( n < 1 ) return 0 ; for ( int i = 1 ; i <= n ; ++ i ) { int temp = i ; while ( temp ) { if ( temp % 10 == 1 ) ++ number ; temp / = 10 ; } } return number ; } } ; 还有这个方法,给跪了orz! //运行时间:6ms 占用内存:476k int