news 2026/5/20 15:19:37

【优选算法必刷100题】第41-42题(模拟):Z 字形变换,外观数列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【优选算法必刷100题】第41-42题(模拟):Z 字形变换,外观数列

🔥个人主页:Cx330🌸

❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》

《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔

《Git深度解析》:版本管理实战全解

🌟心向往之行必能至


🎥Cx330🌸的简介:


前言:

聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力

41. Z 字形变换

题目链接:

6. Z 字形变换 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(模拟):
思路:

找规律,用 row 代替行数,row = 4 时画出的 N 字形如下:
0 2row - 2 4row - 4
1 2row - 3 2row - 1 4row - 5 4row - 3
2 2row-4 2row 4row - 6 4row - 2
3 2row + 1 4row - 1

不难发现,数据是以 2row - 2 为⼀个周期进行规律变换的。将所有数替换成用周期来表示的变量:
第一行的数是:0, 2row - 2, 4row - 4;

第二行的数是:1, (2row - 2) - 1, (2row - 2) + 1, (4row - 4) - 1, (4row - 4) + 1;

第三行的数是:2, (2row - 2) - 2, (2row - 2) + 2, (4row - 4) - 2, (4row - 4) + 2;

第四行的数是:3, (2row - 2) + 3, (4row - 4) + 3。

可以观察到,第一行、第四行为差为 2row - 2 的等差数列;第二行、第三行除了第⼀个数取值为行数,每组下标为(2n - 1, 2n)的数围绕(2row - 2)的倍数左右取值。
以此规律,我们可以写出迭代算法。

模拟解法代码(C++):
class Solution { public: string convert(string s, int numRows) { string ret; int d=2*numRows-2,n=s.size(); //如果n=1直接返回原字符串 if(numRows==1) return s; //处理第一行 for(int i=0;i<n;i+=d) ret+=s[i]; //处理中间行 for(int k=1;k<numRows-1;k++) { for(int i=k,j=d-k;i<n||j<n;i+=d,j+=d) { if(i<n) ret+=s[i]; if(j<n) ret+=s[j]; } } //处理最后一行 for(int i=numRows-1;i<n;i+=d) ret+=s[i]; return ret; } };

博主手记(字体还请见谅哈):


42. 外观数列

题目链接:

38. 外观数列 - 力扣(LeetCode)

题目描述:

题目示例:

算法原理(模拟):
思路:

所谓【外观数列】,其中只是依次统计字符串中连续且相同的字符的个数。依据题意,依次模拟即可。

模拟解法代码(C++):
class Solution { public: string countAndSay(int n) { string ret="1"; for(int i=1;i<n;i++)//解释n-1次ret { string tmp; int len=ret.size(); for(int left=0,right=0;right<len;) { while(right<len&&ret[left]==ret[right]) right++; //to_string获取元素个数 tmp+=to_string(right-left)+ret[left]; left=right; } ret=tmp; } return ret; } };

博主手记(字体还请见谅哈):


总结:

结语:本文分享了两个算法题的解题思路和C++实现。首先针对"Z字形变换"问题,通过观察字符排列规律,采用周期模拟法将字符串按特定顺序重组。其次解决"外观数列"问题,通过统计连续相同字符个数生成新字符串。两题均采用模拟解法,文章以实战为导向,简洁明了地展示了从问题分析到代码落地的完整过程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 2:48:15

Windows系统文件scrptadm.dll丢失损坏 无法运行软件 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/14 20:06:47

开源鸿蒙跨平台开发训练营--AtomGit(GitCode)口袋工具(七)

我们继续接着上一章的内容&#xff0c;完成文件内容的显示。显示文件内容1. 调整侧边栏内容上一章&#xff0c;我们侧边栏只显示了根目录下的文件和文件夹。这一张我们要将其显示成一个可折叠和展开的文件树。目的是为了可以让用户在侧边栏中切换想要查看的文件。GitCodeCodeRe…

作者头像 李华
网站建设 2026/5/16 11:17:02

【鸿蒙开发案例篇】基于MindSpore Lite的端侧人物图像分割案例

大家好&#xff0c;我是 V 哥。今天的内容咱们来详细介绍鸿蒙开发中&#xff0c;如何使用MindSpore Lite在鸿蒙系统上实现端侧人物图像分割功能&#xff0c;以及提供完整的实现方案。 联系V哥获取 鸿蒙学习资料 系统架构设计 技术栈与组件关系 #mermaid-svg-kKMHq6sLNO6nbkY…

作者头像 李华
网站建设 2026/4/30 16:46:24

程序员应该熟悉的概念(6)Fine-tuning和RAG

大语言模型/LLM 通常是由海量通用知识&#xff08;如语法、常识、逻辑&#xff09;训练的&#xff0c;在面对具体场景&#xff08;如医疗问诊、法律文书生成&#xff09;时&#xff0c;能力往往不足。 Fine-tuning/微调 正是为解决这一问题而生的核心技术&#xff0c;其本质是在…

作者头像 李华
网站建设 2026/5/12 18:52:32

7、电子元件与树莓派开发入门

电子元件与树莓派开发入门 1. 常见电子元件介绍 二极管(Diodes) :电阻会双向阻止电流流动,而二极管是一种双端电子元件,具有单向低电阻、反向高电阻的特性。二极管大多由硅制成,发光二极管(LED)是电子电路中最常用的二极管,当在其阳极和阴极提供足够电压时会发光。…

作者头像 李华
网站建设 2026/5/19 21:30:23

数据不丢失 + SEO 保障!LTD 营销枢纽破解外贸建站核心痛点

为什么选择LTD营销枢纽&#xff1f;很多企业担心SaaS建站“停止续费就丢站”&#xff0c;但LTD营销枢纽提供“数据备份自由”——你可随时导出网站所有数据&#xff08;包括客户信息、内容素材、订单记录&#xff09;&#xff0c;即使后续选择其他方案&#xff0c;核心资源也不…

作者头像 李华