关于c++:Leetcode专题233数字1的个数

力扣链接:
https://leetcode.cn/problems/…
解题思路:

  1. 找法则
    从个位数开始,依照以后位将数字分成右边high局部,左边low局部,以后位的数字分为三种类型:
    (1)0: res = high * digit;
    (2)1: res = high * digit + low + 1;
    (3)2/…/9: res = (high + 1) * digit;
class Solution{
  public:
      int countDigitOne(int n) {
          // 参数判断
          if (n < 1) {
              return 0;
          }
          // 从个位数开始
          long digit = 1;
          int high = n / 10, low = 0, cur = n % 10;
          int res = 0;
          while(cur != 0 || high != 0) {
              if (cur == 0) {
                  res += high * digit;
              }
              else if (cur == 1) {
                  res += high * digit + low + 1;
              }
              else {
                  res += (high + 1) * digit;
              }
              low += cur * digit;
              high = high / 10;
              cur = high % 10;
              digit *= 10;
          }
          return res;
      }
};

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理