算法--辗转相除法

这篇具有很好参考价值的文章主要介绍了算法--辗转相除法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

gcd 算法–辗转相除法

遇到一题算法题,如下:

求字符串的最大公因子?

对于字符串 s 和 t,只有在 s = t + … + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。

给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 x 能除尽 str2 。

接下来回顾下两个数学概念:

  • 约数。整数a除以整数b(b≠0)除得的商正好是整数而没有余数,那么整数b称为a的约数。即4的正约数有:1、2、4。代入到字符串中,则意味着字符串ABC的约数(其实就是子字符串)共有A,B,C三个。
  • 最大公约数。两个或多个整数共有约数中最大的一个被称为最大公约数。举例:求数值3和数值9的最大公约数。数值3的正约数有1,3,数值9的正约数有1,3,9,数值3与数值9约数并集(既存在3的约数集中,又存在9的约数集中的数的集合)为1、3。则最大公约数为3。写作gcd(3,
    9) = 3。附,gcd是英文Greatest Common
    Divisor(最大公约数)的缩写。代入到字符串中,则字符串ABCABC和字符串ABC的最大公约数为ABC,即本题中所需要的最大公因子。

那么问题的关键就可以,如何求得最大公约数?在数学中,可以利用辗转相除法来计算最大公约数。

辗转相除法是以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数的计算公式。如下:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1

由此,可以写出gcd函数:

// 最大公约数计算公式
function gcd(num1, num2) {
    // 利用辗转相除法来计算最大公约数
    return num2 === 0 ? num1 : gcd(num2, num1 % num2); 
}

所以,整道题的题解是:
算法--辗转相除法,算法
因此代码为:

var gcdOfStrings = function(str1, str2) {
    if(str1 + str2 !== str2 + str1) return '';
    const gcd =(a,b)=>(0===b?a:gcd(b,a%b))
    return str1.substring(0,gcd(str1.length,str2.length))
};

考题出处:https://leetcode.cn/problems/greatest-common-divisor-of-strings/submissions/文章来源地址https://www.toymoban.com/news/detail-541215.html

到了这里,关于算法--辗转相除法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 辗转相除法——求最大公约数(易懂详解)

    定义 最大公因数:也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 辗转相除法:欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。 举例理解 比如现在要

    2024年02月16日
    浏览(40)
  • 【C语言】辗转相除法求最大公约数(详解)

    辗转相除法(又称欧几里德算法)是一种用于求解两个整数的最大公约数的方法。本文将使用C语言来实现辗转相除法,并对其原理进行解释。 辗转相除法的原理非常简单。假设有两个整数a和b,其中a b。通过对a除以b求余数,得到余数r1。然后把b除以r1求余数,得到余数r2。如

    2024年02月07日
    浏览(54)
  • C语言辗转相除法运用 24/1/22笔记错题整理

    题目: 思路:一开始用最普通的方法去解题,计算量较大,但是 求最大公约数常用的有两种简单方法,一是九章算术中的 更相减损术 :大数减小数直到相等,相等的数即最大公约数,该算法 时间复杂度约为O(N) ;二是欧几里得的 辗转相除法 :大数除以小数取余数(相当于模

    2024年01月23日
    浏览(55)
  • C语言的三个经典题目:三步翻转法、杨氏矩阵、辗转相除法

    三步翻转法是C语言中用来求旋转字符串的一种进阶方法,我们以具体例题对其进行介绍。 例:求一个字符串左旋n个字符后得到的新字符串 普通方法实现 我们知道,左旋一个字符一共分为三步: 将字符串的第一个字符存放到临时变量中; 将字符串中除’\\0’外的所有字符整

    2024年02月02日
    浏览(48)
  • C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)

    从键盘 输入两个数 , 求 这 两个数 的 最大公约数 。                       =========================================================================                         (一). 生成 相关变量 ; 从键盘 输入两个数 ; 再 使用 三目操作符(条件操作符) 找出 较小值 。        

    2024年02月09日
    浏览(45)
  • 一文看懂什么是欧几里得算法!多图演示辗转相除算法究竟是什么!为什么要这样开展!多图预警!

    ps:全文图片均为手绘,如果有不标准的地方还望谅解,之后会慢慢熟悉画图工具的,感谢感谢!!! 欧几里得算法 又称为 辗转相除法 ,是指用于计算两个非负整数a,b的最大 公约数 。 两个整数的最大公约数是指能够同时整除它们的最大的正整数。 辗转相除法能够实现效

    2024年02月02日
    浏览(47)
  • 辗转相除为什么能得到最大公因式?高等代数1.2

    我们来继续探索两个多项式之间的关系,今天的研究对象是最大公因式。 一)最大公因式 因式 :g(x)|f(x),则f(x)=h(x)*g(x),g(x)是f(x)的 因式。 倍式:f(x)是g(x)的倍式。 最大公因式的定义如下图。 最大公因式从字面上就可以理解了,一是公因式,二是要最大的那一些,至于为什么

    2024年02月06日
    浏览(60)
  • 面试算法111:计算除法

    输入两个数组equations和values,其中,数组equations的每个元素包含两个表示变量名的字符串,数组values的每个元素是一个浮点数值。如果equations[i]的两个变量名分别是Ai和Bi,那么Ai/Bi=values[i]。再给定一个数组queries,它的每个元素也包含两个变量名。对于queries[j]的两个变量名

    2024年02月01日
    浏览(42)
  • 【算法笔记】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

    求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C)、位运算、递归、公式、sizeof。 习题链接:题目链接 该题把我们的所有能用的方法都给限制死了,我们只能用一些的特殊的方法来做。不知道大家在思考的过程中考没考虑过

    2024年02月07日
    浏览(58)
  • Java中整数相除并保留两位小数的实现方式、保留两位小数:Java中整数相除的处理方法、解决Java整数相除后精度丢失的问题、Java数值计算:整数相除保留指定小数位数的技巧

    当在Java中需要进行整数相除并保留两位小数时,可以使用以下两种方式实现: 1. 使用浮点数类型和DecimalFormat进行格式化:  2. 使用BigDecimal类进行精确的数值计算和格式化输出: 在选择使用哪种方式时,需要根据具体的业务需求和数值计算的精度要求进行权衡和选择。如果

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包