Leetcode每日一题 —— 3871. 统计范围内的逗号 II

魔法师 2026-09-09 08:40 1



思路


跟昨天一样,就是从 1,000 开始 每多3位多一次判断


代码


class Solution {
public long countCommas(long n) {
long ans = 0;
if (n >= 1_000) {
ans += (n - 999);
}
if (n >= 1_000_000) {
ans += (n - 999_999);
}
if (n >= 1_000_000_000) {
ans += (n - 999_999_999);
}
if (n >= 1_000_000_000_000L) {
ans += (n - 999_999_999_999L);
}
if (n >= 1_000_000_000_000_000L) {
ans += (n - 999_999_999_999_999L);
}
return ans;
}
}
最新回复 (6)
  • CPython 09-09 09:17
    1
    class Solution:
    def countCommas(self, n: int) -> int:
    if n < 1000: return 0
    x = 1000
    ans = 0
    while x <= n:
    ans += n - x + 1
    x *= 1000
    return ans
  • SomeBottle 09-09 09:30
    2

    无他,分段处理即可。


    class Solution {
    public:
    long long countCommas(long long n) {
    // 分段处理即可
    return max(0LL,n-1000+1)+max(0LL,n-1000000+1)+max(0LL,n-1000000000+1)+max(0LL,n-(long long)(1e12)+1)+max(0LL,n-(long long)(1e15)+1);
    }
    };
  • Lvvvv 09-09 10:02
    3

    最慢的一集


    class Solution {
    public:
    long long countCommas(long long n) {
    long long res = 0;
    int base = 0;
    long long val = 1;
    while(val * 1000 <= n) {
    res += val* 999 * base;
    val *= 1000;
    base += 1;
    }
    res += (n - val + 1) * base;
    return res;
    }
    };
  • 无名 09-09 10:44
    4

    class Solution:
    def countCommas(self, n: int) -> int:

    if n>=1 and n<1000:
    return 0

    elif n>=1e3 and n<1e6:
    return int((n-1e3+1)*1)

    elif n>=1e6 and n<1e9:
    return int((n-1e6+1)*2+(1e6-1e3)*1)

    elif n>=1e9 and n<1e12:
    return int((n-1e9+1)*3+(1e9-1e6)*2+(1e6-1e3)*1)

    elif n>=1e12 and n<1e15:
    return int((n-1e12+1)*4+(1e12-1e9)*3+(1e9-1e6)*2+(1e6-1e3)*1)

    else:
    return int(1*5+(1e15-1e12)*4+(1e12-1e9)*3+(1e9-1e6)*2+(1e6-1e3)*1)

    打卡

  • o8080x 09-09 12:30
    5

    Kotlin每日打卡(贡献法):


    class Solution {
    fun countCommas(n: Long): Long {
    var ans = 0L
    var i = 1000L
    while (i <= n) {
    ans += (n - i + 1)
    i *= 1000
    }
    return ans
    }
    }
  • 欧拉线 09-09 12:51
    6

    C语言版本


    long long countCommas(long long n) {
    long long ans = 0, k = 1;
    long long nalverqito = n;
    while (k <= nalverqito / 1000) {
    k *= 1000;
    ans += nalverqito - k + 1;
    }
    return ans;
    }
* 帖子来源Linux.do
返回