给你一个整数 num
,请你找出同时满足下面全部要求的两个整数:
- 两数乘积等于
num + 1
或num + 2
- 以绝对差进行度量,两数大小最接近
你可以按任意顺序返回这两个整数。
示例 1:
输入:num = 8 输出:[3,3] 解释:对于 num + 1 = 9,最接近的两个因数是 3 & 3;对于 num + 2 = 10, 最接近的两个因数是 2 & 5,因此返回 3 & 3 。
示例 2:
输入:num = 123 输出:[5,25]
示例 3:
输入:num = 999 输出:[40,25]
提示:
1 <= num <= 10^9
package Solution1362;
import java.util.Arrays;
class Solution {
public int[] closestDivisors(int num) {
int min = num + 2;
int a = 0;
int b = 0;
for (int i = (int) Math.sqrt(num + 1); i >= 1; --i) {
if ((num + 1) % i == 0) {
a = (num + 1) / i;
b = i;
min = Math.abs(a - b);
break;
}
}
for (int i = (int) Math.sqrt(num + 2); i >= 1; --i) {
if ((num + 2) % i == 0) {
if (Math.abs((num + 2) / i - i) < min) {
a = (num + 2) / i;
b = i;
}
break;
}
}
return new int[] { a, b };
}
public static void main(String[] args) {
Solution sol = new Solution();
int num = 1;
System.out.println(Arrays.toString(sol.closestDivisors(num)));
}
}