58 lines
1.2 KiB
Java
58 lines
1.2 KiB
Java
|
//给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
// 示例 1:
|
|||
|
//
|
|||
|
//
|
|||
|
//输入:n = 13
|
|||
|
//输出:6
|
|||
|
//
|
|||
|
//
|
|||
|
// 示例 2:
|
|||
|
//
|
|||
|
//
|
|||
|
//输入:n = 0
|
|||
|
//输出:0
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
// 提示:
|
|||
|
//
|
|||
|
//
|
|||
|
// 0 <= n <= 2 * 109
|
|||
|
//
|
|||
|
// Related Topics 递归 数学 动态规划
|
|||
|
// 👍 278 👎 0
|
|||
|
|
|||
|
package leetcode.editor.cn;
|
|||
|
|
|||
|
//233:数字 1 的个数
|
|||
|
class NumberOfDigitOne {
|
|||
|
public static void main(String[] args) {
|
|||
|
//测试代码
|
|||
|
Solution solution = new NumberOfDigitOne().new Solution();
|
|||
|
//4
|
|||
|
System.out.println(solution.countDigitOne(11));
|
|||
|
//6
|
|||
|
System.out.println(solution.countDigitOne(13));
|
|||
|
}
|
|||
|
|
|||
|
//力扣代码
|
|||
|
//leetcode submit region begin(Prohibit modification and deletion)
|
|||
|
class Solution {
|
|||
|
|
|||
|
public int countDigitOne(int n) {
|
|||
|
int index = 1;
|
|||
|
int count = 0;
|
|||
|
while (index<=n){
|
|||
|
count += (n / (index * 10)) * index + Math.min(Math.max(n % (index * 10) - index + 1, 0), index);
|
|||
|
index *= 10;
|
|||
|
}
|
|||
|
return count;
|
|||
|
}
|
|||
|
}
|
|||
|
//leetcode submit region end(Prohibit modification and deletion)
|
|||
|
|
|||
|
}
|