LeetCode 每日一题 2748. 美丽下标对的数目

Hey编程小伙伴们👋,今天我要带大家一起解锁力扣上的一道有趣题目------ 美丽下标对的数目 - 力扣 (LeetCode)。这不仅是一次编程挑战,更是一次深入理解欧几里得算法判断互质的绝佳机会!🎉

问题简介

题目要求我们给定一个整数数组 nums,找出所有满足特定条件的下标对。这里的特定条件是:如果 nums[i] 的第一个数字和 nums[j] 的最后一个数字互质,那么我们称这对下标为"美丽下标对"。🌟

互质:数学中的"独行侠"🦸‍♂️

在数学的世界里,如果两个数的最大公约数(GCD)是1,我们称这两个数为互质的。换句话说,它们之间没有其他公共的"朋友"来整除它们,1是它们唯一的公约数。🕵️‍♂️

欧几里得算法:追溯GCD的足迹🔍

欧几里得算法是一种非常高效的计算两个正整数最大公约数的方法。它的基本思想是:两个正整数a和b(假设a>b)的最大公约数与b和a%b(a除以b的余数)的最大公约数相同。🔄

互质的判断逻辑🤔

这里我们深入探讨一下,为什么通过欧几里得算法可以判断两个数是否互质。互质的定义是两个数的最大公约数为1。欧几里得算法的核心在于它递归地将问题规模缩小,直到无法再分。当较小的数变为1时,如果此时较大的数也是1,那么这两个数就是互质的。🔑

算法步骤:
  1. 开始:我们有两个整数a和b,其中a是较大的数。
  2. 计算余数 :我们计算a除以b的余数,记为r(即 a % b)。
  3. 递归替换:我们将b的值赋给a,将r的值赋给b,然后重复这个过程。
  4. 结束条件:当b变为0时,a的值就是我们要找的最大公约数。🏁
举个例子:

假设我们要判断35和18是否互质:

  • 我们开始计算35除以18的余数,得到17。🔢
  • 然后我们用18除以17的余数,得到1。🕒
  • 最后,我们用17除以1,余数为0,此时18(原来的b)是1,这意味着35和18的最大公约数是1,所以它们是互质的。🎊

通过这种方式,欧几里得算法不仅帮助我们找到了两个数的最大公约数,也让我们能够判断这两个数是否互质。这是一种既简洁又高效的方法,非常适合在编程中实现。👩‍💻

代码实现(scala)

scala 复制代码
object Solution {
    def countBeautifulPairs(nums: Array[Int]): Int = {
        val pairs = for {
            i <- nums.indices
            j <- (i + 1) until nums.length
        } yield (i, j)

        pairs.filter { case (i, j) =>
            val (firstDigit, secondDigit) = (nums(i).toString.charAt(0).asDigit, nums(j) % 10)
            gcd(firstDigit, secondDigit) == 1
        }.length
    }
        
    def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)

}

#算法 #力扣 #质数 #编程技巧

相关推荐
草莓熊Lotso42 分钟前
《算法闯关指南:优选算法--模拟》--41.Z 字形变换,42.外观数列
开发语言·c++·算法
啊吧怪不啊吧1 小时前
算法王冠上的明珠——动态规划之斐波那契数列问题
大数据·算法·动态规划
无敌最俊朗@8 小时前
力扣hot100-206反转链表
算法·leetcode·链表
Kuo-Teng8 小时前
LeetCode 279: Perfect Squares
java·数据结构·算法·leetcode·职场和发展
王哈哈^_^8 小时前
YOLO11实例分割训练任务——从构建数据集到训练的完整教程
人工智能·深度学习·算法·yolo·目标检测·机器学习·计算机视觉
檐下翻书1738 小时前
从入门到精通:流程图制作学习路径规划
论文阅读·人工智能·学习·算法·流程图·论文笔记
CoderYanger9 小时前
B.双指针——3194. 最小元素和最大元素的最小平均值
java·开发语言·数据结构·算法·leetcode·职场和发展·1024程序员节
小曹要微笑10 小时前
STM32各系列时钟树详解
c语言·stm32·单片机·嵌入式硬件·算法
前进的李工11 小时前
LeetCode hot100:094 二叉树的中序遍历:从递归到迭代的完整指南
python·算法·leetcode·链表·二叉树
麦麦大数据12 小时前
F049 知识图谱双算法推荐在线学习系统vue+flask+neo4j之BS架构开题论文全源码
学习·算法·知识图谱·推荐算法·开题报告·学习系统·计算机毕业设计展示