Given an integer num, find the closest two integers in absolute difference whose product equals num + 1 or num + 2.

    Return the two integers in any order.

    Example 1:

    1. Input: num = 8
    2. Output: [3,3]
    3. Explanation: For num + 1 = 9, the closest divisors are 3 & 3, for num + 2 = 10, the closest divisors are 2 & 5, hence 3 & 3 is chosen.

    Example 2:

    1. Input: num = 123
    2. Output: [5,25]

    Example 3:

    1. Input: num = 999
    2. Output: [40,25]

    Constraints:

    • 1 <= num <= 10^9

    题意

    给定一个数num,求一组差最小的两个数,且这两个数之积等于num+1或num+2。

    思路

    从开根处往前搜索,最后比较得到的两组值。


    代码实现

    1. class Solution {
    2. public int[] closestDivisors(int num) {
    3. int[] p1 = solve(num + 1);
    4. int[] p2 = solve(num + 2);
    5. return p1[1] - p1[0] < p2[1] - p2[0] ? p1 : p2;
    6. }
    7. private int[] solve(int num) {
    8. int[] pair = new int[2];
    9. int mid = (int) Math.sqrt(num);
    10. for (int i = mid; i >= 1; i--) {
    11. if (num % i == 0) {
    12. pair[0] = i;
    13. pair[1] = num / i;
    14. break;
    15. }
    16. }
    17. return pair;
    18. }
    19. }