题目
题目描述
给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。 两个数的 最大公约数 是能够被两个数整除的最大正整数。
示例 1:
输入:nums = [2,5,6,9,10] 输出:2 解释: nums 中最小的数是 2 nums 中最大的数是 10 2 和 10 的最大公约数是 2
示例 2:
输入:nums = [7,5,6,8,3] 输出:1 解释: nums 中最小的数是 3 nums 中最大的数是 8 3 和 8 的最大公约数是 1
示例 3:
输入:nums = [3,3] 输出:3 解释: nums 中最小的数是 3 nums 中最大的数是 3 3 和 3 的最大公约数是 3
提示:
- 2 <= nums.length <= 1000
- 1 <= nums[i] <= 1000
来源
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-greatest-common-divisor-of-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
解法1
class Solution {
public int findGCD(int[] nums) {
int max = nums[0];
int min = nums[0];
for (int num : nums) {
max = Math.max(max, num);
min = Math.min(min, num);
}
if (max % min == 0) {
return min;
} else {
for (int i = min; i > 0; i--) {
if (max % i == 0 && min % i == 0) {
return i;
}
}
}
return 1;
}
}
解法2
public class Solution {
public int findGCD(int[] nums) {
int max = nums[0];
int min = nums[0];
for (int num : nums) {
max = Math.max(max, num);
min = Math.min(min, num);
}
return gcd(max, min);
}
private int gcd(int a, int b) {
int max = Math.max(a, b);
int min = Math.min(a, b);
if (max % min == 0) {
return min;
}
return gcd(max % min, min);
}
}
解法3
public class Solution {
public int findGCD(int[] nums) {
int max = nums[0];
int min = nums[0];
for (int num : nums) {
max = Math.max(max, num);
min = Math.min(min, num);
}
return gcd(max, min);
}
private int gcd(int a, int b) {
if (a == b) {
return a;
}
int max = Math.max(a, b);
int min = Math.min(a, b);
return gcd(max - min, min);
}
}
解法4
public class Solution {
public int findGCD(int[] nums) {
int max = nums[0];
int min = nums[0];
for (int num : nums) {
max = Math.max(max, num);
min = Math.min(min, num);
}
return gcd(max, min);
}
private int gcd(int a, int b) {
if (a == b) {
return a;
}
if ((a & 1) == 0 && (b & 1) == 0) {
return gcd(a >> 1, b >> 1) << 1;
}
else if ((a & 1) == 0 && (b & 1) != 0) {
return gcd(a >> 1, b);
}
else if ((a & 1) != 0 && (b & 1) == 0) {
return gcd(a, b >> 1);
}
else {
int max = Math.max(a, b);
int min = Math.min(a, b);
return gcd(max - min, min);
}
}
}
|