news 2026/4/3 4:01:11

【优选算法必刷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/3/22 17:39:32

SpringBoot3实现高效物料二维码管理

前言 在当今数字化的浪潮中&#xff0c;二维码的身影无处不在&#xff0c;它已成为连接线上线下信息的关键纽带。在物料管理领域&#xff0c;通过二维码对物料进行标识和追踪&#xff0c;能极大地提升管理效率与准确性。本文将详细阐述如何在 Spring Boot 3 项目中实现物料管理…

作者头像 李华
网站建设 2026/3/22 1:47:26

第11.1节 混合储能系统基本原理

第11.1节 混合储能系统基本原理 11.1.1 单一储能技术的局限性及混合动因 单一类型的储能技术,无论其性能如何优异,在面对复杂多元的电力系统或用电负载需求时,往往表现出固有的局限性。这些局限性主要体现在时间尺度、功率与能量特性以及经济性三个维度。以飞轮、锂离子电…

作者头像 李华
网站建设 2026/3/31 16:41:14

SSM物业信息管理系统3z357(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面

系统程序文件列表系统项目功能&#xff1a;业主,申报信息,收费信息,物业房产,业主车位,物业公告SSM物业信息管理系统开题报告一、课题背景与意义1.1 课题背景随着我国城市化进程的加速&#xff0c;居民小区数量不断增加&#xff0c;物业行业作为城市管理的重要组成部分&#xf…

作者头像 李华
网站建设 2026/4/3 3:14:07

消防风机公司排行榜Top1!消防风机哪个品牌好?

火灾无情&#xff0c;安全有备&#xff01;在火灾发生时&#xff0c;快速排烟是挽救生命的关键一步。在消防安全领域&#xff0c;高效、可靠的消防系统是保障生命财产安全的核心防线。英飞消防风机&#xff0c;以可靠、节能、静音三大核心优势&#xff0c;为商业综合体、地下车…

作者头像 李华
网站建设 2026/4/2 1:06:43

Polar2025冬季个人挑战赛【未整理好版】

MISC 猛攻 在线解https://tools.jb51.net/aideddesign/img_add_info 6DFUP解压缩包 Hint:身份验证成功,欢迎进入巴别塔,请破解绝密情报得到最后的结果 wireshark打开,绝密分流服务器.pcap 这个GET传参很可疑,右键追踪流 flag{che_li_cheng_gong} 先有圣人后有天 一个…

作者头像 李华
网站建设 2026/3/21 5:06:09

hekate bootlogo个性化定制教程:3步打造专属开机画面

你是否曾经想过&#xff0c;让你的Nintendo Switch开机时不再是千篇一律的默认画面&#xff1f;hekate作为Switch的GUI引导程序&#xff0c;为你提供了完美的解决方案。通过简单的三步操作&#xff0c;你就能轻松打造出充满个性的专属开机画面&#xff0c;从启动瞬间就展现你的…

作者头像 李华