刷題 1 n的整數中 1 出現的個數

2021-08-28 07:23:34 字數 776 閱讀 8834

對於每一位來說, 該位是1的數字的個數.

比如對於數字:3141592, 百位為1 時, 有多少1出現?

將數字分為兩部分: pre = 31415 和 post = 92

首先考慮百位之前, 即 31415 xx.

當百位數字》1時 ,共有(0000~3141) 3142 * 100個1.

當百位數字 <= 1時, (0000~3140) 3141 * 100, 特別注意, 這裡的取值因為當取到3141的時候, 後面的範圍不再是 0~99了.

有個trick來計算, 即 (pre + 8) // 10 * m

比如這裡, (31415 + 8 ) // 10 * 100 = 3142 * 100.

再考慮百位之後, 即***x 92

只有當百位數字為1時才能統計百位數字為1的個數.

即 100~ 192

post+1

def

count_1_nums

(n):

pre =

0 post =

0 m =

1 counts =

0while m <= n :

pre = n // m

post = n%m

counts +=

(pre +8)

//10

* m counts += post +

1if pre %

10==

1else

0return counts

1 n整數中1出現的次數

示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 62.1 思路分析 題目要求1 n中1出現的次數,考慮將n轉換為字串,然後統計字元1的個數,但這樣會超時 既然1不行,換一種思路,將n轉換為字串後,可以容易確定n的位數 利用for迴圈,從個位開始直到最高位,計算每一位上1出現的次數...

1 n 整數中1出現的次數(21)

方法一 將每個數字中的1的個數進行相加,最終的結果就是1出現的總的次數。但是這種方法的效率較低,時間複雜度為 o n log n o n log n o n lo gn 當n非常大的時候,需要大量的計算。class solution return sumofone int numofone int ...

求1 n整數中1出現的次數

自己不會,看看大神的解法,自己總結一下下,有更好的思路,望指教!解題思路 將數字進行拆分,分為三部分,高位,低位,和當前位 以求十位出現1的次數為例,digit 10 1.以n 1202為例,此時,高位high 12,低位low 2,當前位cur 0 此時十位出現1 的數字的範圍是 0010 111...