class Solution(object):
def findKthNumber(self, m, n, k):
# x是否足够大可以成为乘法表中的第k小的值
def enough(x):
rank = 0
for i in range(1, m+1): # 遍历每一行
# 每遍历一行,能增加的排序数都会减少(因为这里是乘法关系)
# 而最多可以增加n列的数量
rank += min(x // i, n)
return rank >= k # 当前值的顺序是否已经大于等于k?布尔值
# 确定二分的上、下边界
l, r = 1, m * n
while l < r:
mid = (l + r) // 2
# 若不足k,则需要扩大左边界
if not enough(mid):
l = mid + 1
# 若已经出现k,则需要减小右边界,继续往k靠近,直至恰好等于k
else:
r = mid
return l
668. 乘法表中第 K 小的数(Hard)
于 2021-08-28 00:33:55 首次发布