劍指offer第三十一題目 整數1出現的個數

2021-09-29 16:04:11 字數 827 閱讀 4434

題目:

解法:第一種:直接從1到n唄,

每個數字,我們從個位,十位,到最高位分析,有多少個就加上;

然後從1遍歷到n,最後所有的加上,就是總數唄。

我們分析一下時間複雜度。每個數字的分析,肯定是lg(n)(肯定是以10為底,n的對數)

從1到n,那麼時間複雜度就是nlogn

我沒寫,參考   

第二種,trick

作為一道分析數字規律的題目,我敗了,但是查了好多部落格,我感覺我參考的這種方法是最好的,為什麼?

參考位址 :

/*

1,2,...n這n個數中

x位上每隔(x*10)個數出現x個1, n中有n/(x*10)個完整的(x*10),以百位為例,就是n中有n/1000個完整的1000, 分別是1~~1000,1001~~2000, 2001~~3000,...(n/1000 - 1)*1000 + 1~~(n/1000)*1000

最後還可能剩下不足1000的部分, 也就是從(n/1000)*1000+1~~n, 百位的情況對應n%1000

不足(x*10)的部分,也就是n%(x*10)的部分, x位上也有可能出現1

如果n%(x*10)2*x-1, x位上有x個1

如果n%(x*10)>=x && n%(x*10)<=2*x-1, x位上有n%(x*10) - x + 1個1

*/public class solution

return count;}}

LeetCode第三十一題 Python實現

title leetcode no.31 categories tags 實現獲取 下乙個排列 的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須 原地 修改,只允許使用額外常數空間。示例 1 輸入 num...

劍指offer(一) 題目彙總

1 二進位制中1的個數 面試15 2 判斷二進位制中0的個數 3 二進位制高位連續0的個數 1 二叉搜尋樹第k個結點 面試54 2.0 從上往下列印二叉樹 面試32 2.1 二叉樹列印成多行 面試32 2.2 按之字形順序列印二叉樹 面試32 3 資料流中位數 面試41 4 二叉樹中和為某一值的路徑...

LeetCode第三十一題 下乙個排列

問題簡介 給定乙個陣列,將數字重新排列到字典上的下乙個更大的數字排列,當沒有這種排列方式時,即將陣列公升序排列 舉例 1.給定陣列 1,2,4,3,0 結果陣列 1,3,0,2,4 解釋 可以倒序看給定陣列,在數字4處遇見更小的數值2時,從陣列末尾處向前找打第乙個比2大的數字,即3,交換兩個數字,這...