思路一
我找出所有的相乘等于num+1或者num+2的 两个数。更新他们的距离。从而获得最终的结果。
public class Solution {
public int[] closestDivisors(int num) {
int[] res = new int[2];
double range = Math.sqrt(num + 2);
int min = Integer.MAX_VALUE;
int tmp;
for (int i = 1; i < range + 1; i++) {
if ((num + 1) % i == 0) {
tmp = (num + 1) / i;
if (Math.abs(tmp - i) < min) {
res[0] = i;
res[1] = tmp;
min = Math.abs(tmp - i);
}
}
if ((num + 2) % i == 0) {
tmp = (num + 2) / i;
if (Math.abs(tmp - i) < min) {
res[0] = i;
res[1] = tmp;
min = Math.abs(tmp - i);
}
}
}
return res;
}
}
思路二
在思路一的基础上思考,其实越靠近平方根,其实距离是最小的。
public class Solution {
public int[] closestDivisors(int num) {
int[] res = new int[2];
int sqrt1 = (int) Math.sqrt(num + 1);
int sqrt2 = (int) Math.sqrt(num + 2);
while (((num + 1) % sqrt1) != 0) {
sqrt1--;
}
res[0] = sqrt1;
res[1] = (num + 1) / sqrt1;
while (((num + 2) % sqrt2) != 0) {
sqrt2--;
}
if (Math.abs(sqrt2 - (num + 2) / sqrt2) < Math.abs(res[0] - res[1])) {
res[0] = sqrt2;
res[1] = (num + 2) / sqrt2;
}
return res;
}
}