题目
几乎每一个人都用 乘法表。但是你能在乘法表中快速找到第 k 小的数字吗?
乘法表是大小为 m x n 的一个整数矩阵,其中 mat[i][j] == i * j(下标从 1 开始)。
给你三个整数 m、n 和 k,请你在大小为 m x n 的乘法表中,找出并返回第 k 小的数字。
示例 1:

输入:m = 3, n = 3, k = 5
输出:3
解释:第 5 小的数字是 3 。
示例 2:

输入:m = 2, n = 3, k = 6
输出:6
解释:第 6 小的数字是 6 。
题解
二分查找
java
class Solution {
public int findKthNumber(int m, int n, int k) {
int left = 1, right = m * n;
while (left < right) {
int x = left + (right - left) / 2;
//x/n:表示1到x/n的行的所有值都小于X
int count = x / n * n;
//统计从x/n + 1行到m行中哪些值小于x
for (int i = x / n + 1; i <= m; ++i) {
count += x / i;
}
if (count >= k) {
right = x;
} else {
left = x + 1;
}
}
return left;
}
}