Leetcode

2748. 美丽下标对的数目

给你一个下标从 0 开始的整数数组 nums 。如果下标对 ij 满足 0 ≤ i < j < nums.length ,如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 ,则认为 nums[i] 和 nums[j] 是一组 美丽下标对 。

返回 nums 中 美丽下标对 的总数目。

对于两个整数 x 和 y ,如果不存在大于 1 的整数可以整除它们,则认为 x 和 y 互质 。换而言之,如果 gcd(x, y) == 1 ,则认为 x 和 y 互质,其中 gcd(x, y) 是 x 和 y 的 最大公因数 。

class Solution {
    public int countBeautifulPairs(int[] nums) {
        int ans = 0;
        for(int i = 0;i < nums.length;i++){
            for(int j = i+1;j<nums.length;j++){
                //nums[i]获取第一位
                int one = getFrist(nums[i]);
                //获取最后一位
                int two = nums[j]%10;
                boolean flag = gcd(one,two);
                if(flag){
                    ans++;
                }
            }
        }
        return ans;

    }
    public boolean gcd(int a,int b){
        if(a<b){
            int temp = b;
            b = a;
            a = temp;
        }
        int c = a%b;
        while(c != 0){
            a = b;
            b = c;
            c = a%b;
        }
        if(b == 1){
            return true; 
        }else{
            return false;
        }
    }

    public int getFrist(int a){
        while(a/10 != 0){
            a /= 10;
        }
        return a;
    }

}

主要方法gcd(求最大公约数)

获取第一位数字穷举不断除10

主要逻辑:暴力枚举将每一个数都枚举出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值