1 n整數中1出現的次數

2021-10-10 03:35:05 字數 1094 閱讀 2767

示例 1:

輸入:n = 12

輸出:5

示例 2:

輸入:n = 13

輸出:6

2.1  思路分析

題目要求1~n中1出現的次數,考慮將n轉換為字串,然後統計字元1的個數,但這樣會超時;

既然1不行,換一種思路,將n轉換為字串後,可以容易確定n的位數;

利用for迴圈,從個位開始直到最高位,計算每一位上1出現的次數並做累加,關鍵是如何計算每一位上1出現的次數;

假設現在n = 345[i]xx,現在i到了第三位,假設要計算該位上1出現的次數,當 i 左邊的高位部分取不到345時,即只取000~344, i 右邊的低位部分可任意取即有00~99,共100種,從而這種情況下必有345*100個1;

上面描述的高位部分取不到345的情況,假設現在取到了,那麼又要分兩種情況:①2 <= i < =9,這種情況下 i 右邊的低位 部分隨便取,共100種;② i == 1時,這種情況下 i 右邊的低位部分不能隨便取了,只能取xx + 1種情況;

把所有情況加起來就是結果。

2.2  **實現

class solution  else if(digit == 1) 

}return count;

}}

2.3  複雜度分析

3.1  思路分析

上面的空間複雜度都很高,考慮將能不能不申請空間,當然是可以的;

通過設計乙個方法求乙個整數的第 i 位數來代替字元陣列的遍歷問題;

3.2  **實現

class solution  else if(digit == 1) 

}return count;

}//獲取乙個整數的第i位數,第1位是個位,第2位是十位,以此類推

int getdigit(int n,int i)

return res;

}}

3.3  複雜度分析

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...

1 n中1出現的次數

輸入乙個整數 n 求1 n這n個整數的十進位制表示中1出現的次數。例如,輸入12,1 12這些整數中包含1 的數字有1 10 11和12,1一共出現了5次。示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 6 解析需要通過找規律來分析。假設我們對5014這個數字求解。1 個位上1出...