kのJava実装LeetCode 668乗算テーブル少数(半分)

668 k番目に小さい数で乗算テーブル

掛け算の九九を持つほとんどの人。しかし、あなたはすぐにk個の小さな数字は掛け算の表を行う見つけることができますか?

高さM、M * N Nの乗算テーブルの幅、及び正の整数kを考えると、あなたは、kのテーブル小さな数値を返す必要があります。

例 1:

入力:M = 3、N = 3 、K = 5
出力:3
説明:
乗算テーブル:
1 2 3
2 6 4
3 6 9

5 3人の少数(1、2、2、3、3)である。
実施例2:

入力:M = 2、N = 3 、K = 6
出力:6
説明:
乗算表:
1. 3 2
2 4 6

最初の数字は小さけれ6 6(1、2、2、3、4、6)。
注:

mおよびnは範囲[1、30000]の間です。
範囲内のK [1、M * N]の間です。

class Solution {
   public int findKthNumber(int m, int n, int k) {
       int left = 1, right = m*n;
        while(left < right){
            int mid = left + (right-left)/2;
            if(counter(m, n, mid) >= k){
                right = mid;
            }else{
                left = mid + 1;
            }
        }
        return left;
    }
    public int counter(int m, int n, int mid) {
        int x = m;
        int y = 1;
        int counter = 0;
        while (x >= 1 && y <= n) {
            if (x * y <= mid) {
                counter += x;
                y++;
            } else {
                x--;
            }
        }
        return counter;
    }
}
リリース1719元の記事 ウォンの賞賛30000 + ビュー351万+

おすすめ

転載: blog.csdn.net/a1439775520/article/details/105302127