【剑指offer】面试题43: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
?
限制:
1 <= n <?2^31
代碼:
class?Solution?{
?????private?int?dfs(int?n)?{
????????if?(n?<=?0)?{
????????????return?0;
????????}
?
????????String?numStr?=?String.valueOf(n);
????????int?high?=?numStr.charAt(0)?-?'0';
????????int?pow?=?(int)?Math.pow(10,?numStr.length()?-?1);
????????int?last?=?n?-?high?*?pow;
?
????????if?(high?==?1)?{
????????????//?最高位是1,如1234,?此時pow?=?1000,那么結果由以下三部分構成:
????????????//?(1)?dfs(pow?-?1)代表[0,999]中1的個數;
????????????//?(2)?dfs(last)代表234中1出現的個數;
????????????//?(3)?last+1代表固定高位1有多少種情況。
????????????return?dfs(pow?-?1)?+?dfs(last)?+?last?+?1;
????????}?else?{
????????????//?最高位不為1,如2234,那么結果也分成以下三部分構成:
????????????//?(1)?pow代表固定高位1,有多少種情況;
????????????//?(2)?high?*?dfs(pow?-?1)代表999以內和1999以內低三位1出現的個數;
????????????//?(3)?dfs(last)同上。
????????????return?pow?+?high?*?dfs(pow?-?1)?+?dfs(last);
????????}
????}
?
????//?遞歸求解
????public?int?countDigitOne(int?n)?{
????????return?dfs(n);
????}
}
總結
以上是生活随笔為你收集整理的【剑指offer】面试题43:1~n整数中1出现的次数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取html样式属性,js怎么获取指
- 下一篇: 【剑指offer】面试题50:第一个只出