233. 数字 1 的个数

image.png

模拟

image.png

  1. class Solution {
  2. public:
  3. int getnum(string& str, int l, int r) {
  4. int res = 0;
  5. for (int i = l; i <= r; i++) {
  6. res = res * 10 + str[i] - '0';
  7. }
  8. return res;
  9. }
  10. int countDigitOne(int n) {
  11. string nums = to_string(n);
  12. int res = 0, len = nums.size();
  13. for (int i = 0; i < len; i++) {
  14. if (i > 0) { // 如果枚举的是最高位,那么不考虑前半部分
  15. res += getnum(nums, 0, i - 1) * pow(10, len - i - 1);
  16. }
  17. if (nums[i] == '1') res += getnum(nums, i + 1, len - 1) + 1;
  18. else if (nums[i] > '1') res += pow(10, len - i - 1);
  19. }
  20. return res;
  21. }
  22. };

数位DP