算法--辗转相除法

news2024/9/29 19:18:43

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LLM】金融大模型场景和大模型Lora微调实战

文章目录 一、金融大模型背景二、大模型的研究问题三、大模型技术路线四、LLaMA家族模型五、Lora模型微调的原理六、大模型Lora微调实战Reference 一、金融大模型背景 金融行业需要垂直领域LLM,因为存在金融安全和数据大多数存储在本地,在风控、精度、实…

Linux常用命令——expand命令

在线Linux命令查询工具 expand 将文件的制表符转换为空白字符 补充说明 expand命令用于将文件的制表符&#xff08;TAB&#xff09;转换为空白字符&#xff08;space&#xff09;&#xff0c;将结果显示到标准输出设备。 语法 expand(选项)(参数)选项 -t<数字>&am…

谷歌验证码kaptcha使用(包括前端获取解析)

1.后端 基于springboot开发。 包结构 1.导入依赖 <!--kaptcha验证码生成器--><dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency> 2.配置类 …

企业低成本万能架构

企业软件应用架构层出不穷&#xff08;这里的应用架构是指偏后端服务的软件架构&#xff09;每个企业由各自业务形态&#xff0c;技术栈&#xff0c;技术路线&#xff0c;技术实力不同&#xff0c;各自架构方案&#xff0c;技术选型各有各的不同&#xff0c;千姿百态&#xff0…

深浅拷贝区别 以及手写深拷贝

一、概念 浅拷贝只复制指向某个对象的指针&#xff0c;而不复制对象本身&#xff0c;新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象&#xff0c;新对象跟原对象不共享内存&#xff0c;修改新对象不会改到原对象。 二、浅拷贝的实现方式 Object.assign()…

读书:《科学营销》

关键8个字 识别、创造、沟通、交付。 识别&#xff1a;识别客户的需求。 创造&#xff1a;创造一个产品或服务&#xff0c;满足用户的需求。 沟通或传播&#xff1a;你还得说出来&#xff0c;否则别人是不知道的。 交付&#xff1a;给客户带来价值。 营销的本质 吸引顾客…

ArrayMap源码解析

一、数据结构 ArrayMap是一个key-value的数据结构&#xff0c;它比HashMap有更高的内存效率 它映射到两个数组结构&#xff1a;一个整数数组mHashes&#xff0c;用来保存key的hashcode&#xff1b;一个对象数组mArray&#xff0c;保存key-value 它不适用于大量数据的存储&…

关于在使用Word写论文时如何引用其它论文的方法

目录 步骤1步骤2 步骤1 全选需要进行标注的论文标题&#xff0c;然后按照下面的图片演示步骤进行操作。 步骤2 注意&#xff1a;如果没看到&#xff0c;拖动一下窗口的滚条&#xff0c;应该在下面一点。然后就是在论文引用的位置&#xff0c;依次进行插入就行了。

DevOps系列文章 之 Java使用jgit管理git仓库

最近设计基于gitops新的CICD方案,需要通过java读写git仓库&#xff0c;这里简单记录下。 在jgit中&#xff0c;存在最核心的三个组件&#xff1a;Git类&#xff0c;Repository类。Git类中包含了push commit之类的常见git操作&#xff0c;而Repository则实现了仓库的初始化和基…

查看自己所有的工程提交次数

git branch -r --contains [ hash index] 远程仓库是否包含当前的提交 我写的注释什么的很少出现 日期的英文, 所以很好统计 #!/bin/bashCOUNTS0 DATE$(date | awk {print $2}) DIRS$(ls) CHECK_URLgit10.0.128.128:sw/ INDEX0 TODAY$(date | awk {printf "%s %s %s"…

Nginx代理nginx.conf配置——反向代理(对WebSocket支持)

一、需求说明 基于Nginx代理nginx.conf配置——反向代理&#xff0c;如果要添加websocket支持&#xff0c;需要进行如下配置 二、配置内容 在http中添加一下配置&#xff0c;添加对websocket支持 http {# 配置其它内容map $http_upgrade $connection_upgrade {default upgra…

国赛试题解析1:SW3模拟办事处与防火墙之间运行OSPFv2协议

试题内容:(4)SW3模拟办事处产品和营销接口配置为loopback,模拟接口up。SW3模拟办事处与FW2之间运行OSPFv2协议,进程2,区域2,SW3模拟办事处发布loopback2、产品和营销。 SW3模拟 办事处 loopback2 10.1.3.2/32 2001:10:1:3::2/128 vlan110(产品) 10.1.110.1/24

【教学类-36-07】对称蝴蝶(midjounery-niji)(涂色、裁剪、游戏(飞舞的蝴蝶))

作品展示 一、利用midjounery获得简笔画样式的“蝴蝶” Animal Mask , simple stroke, cartoon, black and white outline, uncolored NIJI 5 二、图片切割 用以下代码把上面文件夹里所有的2048*2048的单张图片切割程2*2 # 参考网址&#xff1a;https://blog.csdn.net/weixi…

2023年计算机科学与信息技术国际会议(ECCSIT 2023) | Ei Scopus双检索

会议简介 Brief Introduction 2023年计算机科学与信息技术国际会议(ECCSIT 2023) 会议时间&#xff1a;2023年12月15日-17日 召开地点&#xff1a;中国北海 大会官网&#xff1a;www.eccsit.org 2023年计算机科学与信息技术国际会议(ECCSIT 2023)由西南交通大学、西南财经大学、…

使用easyexcel出现的错误

说明&#xff1a;easyexcel&#xff08;官网&#xff1a;https://easyexcel.opensource.alibaba.com/&#xff09;是阿里巴巴提供的&#xff0c;用于项目中读取/导出excel文件的工具&#xff0c;本文介绍使用easyexcel常见的两种错误。 错误一&#xff1a;java.lang.NoSuchMet…

代谢组学分析 PCA PLS-DA OPLS-DA 在R语言中的实现

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种无监督降维方法&#xff0c;能够有效对高维数据进行处理。但PCA对相关性较小的变量不敏感&#xff0c;而PLS-DA&#xff08;Partial Least Squares-Discriminant Analysis&#xff0c;偏最…

el-table 添加合计,合计某一列

效果图&#xff1a; 1. 使用elementui 官网上的方法 如果是只要是数值&#xff0c;就要合并&#xff0c;就只设置show-summary 即可。 2. html&#xff1a; <!--cell-style 改变某一列行的背景色 --><!-- tree-props 配置树形子表row-click: 单击事件highlight-cu…

node修改版本、npm修改版本、yarn无法加载文件、node_modules\sharp: Command failed解决方法

1、node修改版本 步骤1&#xff1a;从node官网下载node压缩包或者exe文件 如果是下载的是exe文件就直接找到原来的node.exe文件替换掉就可以了&#xff0c;环境变量配置不变 如果是下载的node压缩包&#xff0c;需要解压后&#xff0c;修改本地的环境变量配置&#xff08;查看步…

微服务实例构建成 docker 镜像实例

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

抖音seo源码部署搭建--代码分享

一、 开发环境搭建 抖音SEO源码部署环境搭建可以分为以下几个步骤&#xff1a; 安装必要的软件和工具&#xff1a;需要安装Node.js、NPM、Git等软件和工具&#xff0c;具体安装方法可以参考官方文档。 下载源码&#xff1a;从GitHub或其他源码托管平台下载抖音SEO源码。 安装…