解法一: 暴力枚举法 (最简单的思路)
- 首先想法:
- 遍历从1到最小数min之间的所有数, 判断是否有同时能被两个数整除的数, 以此来取得最大公约数
- 排错:
- 若从1开始遍历, 那1必定是公约数, 要求得最大公约数, 则需要进行反向遍历.
- 优化:
- 遍历到1之后, 公约数必定为1, 此时无需进行判断. 遍历的最小值取2, 若未能找到, 则必定为1, 直接返回
- 遍历的最大值为最小整数, 若此时为false, 向下遍历时, 范围(min/2, min)之间的值必定不能被min整除, 为无效遍历, 可以去掉这一部分的遍历作为优化
- 最终代码实现如下:
import java.util.*;
public class Solution {
public int gcd (int a, int b) {
int min = a < b ? a : b;
int max = a > b ? a : b;
if (max % min == 0) return min;
for (int i = min/2; i > 1; i--) {
if (max % i == 0 && min <