Skip to content
LC-2999 Hard LeetCode

2999. Count the Number of Powerful Integers

Read the full problem statement on LeetCode.
Difficulty: hard Acceptance: 47% Topics: Math, String, Dynamic Programming
View full problem on LeetCode
Reference solution (spoiler · python)
# Time:  O(logf)
# Space: O(1)

# math, combinatorics
class Solution(object):
    def numberOfPowerfulInt(self, start, finish, limit, s):
        """
        :type start: int
        :type finish: int
        :type limit: int
        :type s: str
        :rtype: int
        """
        def count(x):
            def length(x):
                result = 0
                while x:
                    x //= 10
                    result += 1
                return result

            result = 0
            n = length(x)
            base = 10**n
            l = n-len(s)
            cnt = (limit+1)**l
            for i in xrange(l):
                base //= 10
                curr = x//base%10
                cnt //= limit+1
                result += (min(curr-1, limit)-0+1)*cnt
                if curr > limit:
                    break
            else:
                if x%base >= int(s):
                    result += 1
            return result

        return count(finish)-count(start-1)


# Time:  O(logf)
# Space: O(logf)
# math, combinatorics
class Solution2(object):
    def numberOfPowerfulInt(self, start, finish, limit, s):
        """
        :type start: int
        :type finish: int
        :type limit: int
        :type s: str
        :rtype: int
        """
        def count(x):
            result = 0
            str_x = str(x)
            l = len(str_x)-len(s)
            cnt = (limit+1)**l
            for i in xrange(l):
                cnt //= limit+1
                result += (min(int(str_x[i])-1, limit)-0+1)*cnt
                if int(str_x[i]) > limit:
                    break
            else:
                if int(str_x[-len(s):]) >= int(s):
                    result += 1
            return result

        return count(finish)-count(start-1)

Solution from kamyu104/LeetCode-Solutions · MIT