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 Reading material
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
Similar questions