【LeetCode每日一题】2807. 在链表中插入最大公约数(模拟+求最大公约数的6中写法)

2024-01-07 00:36

本文主要是介绍【LeetCode每日一题】2807. 在链表中插入最大公约数(模拟+求最大公约数的6中写法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2024-1-6

文章目录

    • [2807. 在链表中插入最大公约数](https://leetcode.cn/problems/insert-greatest-common-divisors-in-linked-list/)
    • 思路:模拟
            • 求最大公约数的几种方法:
      • 1.暴力枚举法
      • 2.辗转相除法
      • 3.辗转相除法 ---递归调用
      • 4.辗转相除法 ---递归调用---简化写法
      • 5.调用函数递归 更相减损法
      • 6.调用函数递归 更相减损法--简化

2807. 在链表中插入最大公约数

在这里插入图片描述

思路:模拟

1.调用函数求出要插入的最大公约数

2.插入到cur的后面

3.因为插了一位,所以移动两个位置

public ListNode insertGreatestCommonDivisors(ListNode head) {ListNode cur = head;while (cur.next!=null){int gcdVal = gcd(cur.val,cur.next.val);//调用函数求出要插入的最大公约数cur.next = new ListNode(gcdVal,cur.next);//插入到cur的后面cur = cur.next.next;//因为插了一位,所以移动两个位置}return head;}/*** 求两个结点值的最大公约数* @param a* @param b* @return*/private int gcd(int a,int b){//求最大公约数有多种写法while (a!=0){int temp = a;a = b % a;b = temp;}return b;}
求最大公约数的几种方法:

1.暴力枚举法

    public static int gcd(int a, int b) {int min = a < b ? a : b;//判断并取出两个数中小的数for (int i = min; i >= 1; i--) { //循环,从最小值开始,依次递减,直到i=1if (a%i==0&&b%i==0){    //当i能同时被A和B余尽时,返回ireturn i;}}return 0;}}

2.辗转相除法

 public static int gcd(int a, int b) {// 辗转相除法int c = a % b;   //先将a对b取余while (c != 0) {   //当余数不等于0时,一直进行循环,直到余数等于0,公约数就为ba = b;         //将a对b的余数再对b取余,直到循环结束b = c;c = a % b;}return b;}

3.辗转相除法 —递归调用

    public static int gcd(int a, int b) {// 辗转相除法 改进,调用函数递归int max = a > b ? a : b; //求出大的数int min = a < b ? a : b; //求出小的数if(max%min==0){return min;      //当大数模小数能余尽时,最大公约数就是小的数}return gcd(max%min,min);//递归函数,参数去前两个数的余数,和小的数

4.辗转相除法 —递归调用—简化写法

public static int gcd(int a, int b) {// 辗转相除法 改进,调用函数递归return (a % b == 0) ? b : gcd(b, a%b );// 相同思路,三元运算/简化写法}

1.如果a余b等于0,说明b就是最大公约数

2.否则,进行递归,b代替曾经的a,让a%b产生的余数代替曾经的b。

3.始终确保大数%小数

4.即使b位置上是值大于a, b代替a后,a(小数)%b(大数) = a ,相当于替换位置

  1. (b,a%b)的位置不能交换,否则无法跳出递归

5.调用函数递归 更相减损法

 public static int gcd(int a, int b) {//调用函数递归 更相减损法int max = a>b?a:b;int min = a<b?a:b;if(max%min==0){return min;}return gcd(max-min,min);//相同思路,将%改为-,优化速度}

6.调用函数递归 更相减损法–简化

    public static int gcd(int a, int b) {//调用函数递归 更相减损法 简易写法if (a < b) {int tmp = a;a = b;b = tmp;}return (a % b == 0) ? b : gcd(a - b, b);

简化不用找大小数,把大数放到前面

因为小数减大数为负数,所以要把大数替换到前面,

    public static int gcd5(int a, int b) {//调用函数递归 更相减损法 简易写法return (a % b == 0) ? b : a > b ? gcd5(a - b, b) : gcd5(b-a,a);}

压行写法,就是三目嵌套,就是可读性不高

点击移步博客主页,欢迎光临~

偷cyk的图

这篇关于【LeetCode每日一题】2807. 在链表中插入最大公约数(模拟+求最大公约数的6中写法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/578156

相关文章

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

MyBatis中的大于等于、小于等于写法

《MyBatis中的大于等于、小于等于写法》MyBatisXML映射文件中处理大于等于和小于等于符号的两种方法:使用转义字符和CDATA块,转义字符更为常见,而CDATA块则提供了一种更易读的解决方案... 目录1. 使用转义字符(推荐)2. 使用 CDATA 块注意事项总结在 MyBATis 的 XML

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright