当前位置: 首页 > news >正文

LeetCode Hot100【6. Z 字形变换】

6. Z 字形变换

自己做

分析

解法1:合并多个子串

class Solution {
public:string convert(string s, int numRows) {vector<string> c(numRows,string());int j = 0;string save;int len = s.size();while(j < len){for(int i = 0; i < numRows && j < len; i++)            //竖向【从0~numRows-1】c[i] += s[j++];for(int i = numRows-2; i > 0 && j < len; i--)          //斜向【从numRows-2~1】      c[i] += s[j++];}for(int i = 0; i < numRows; i++)                            //合并save += c[i];return save;}
};

解法2:数学分析

结果比上面的还差

class Solution {
public:string convert(string s, int numRows) {if (numRows == 1)       //行为1的特殊情况return s;int len = s.size();string save;        //新生成的字符串for (int i = 0; i < numRows; i++) {       //逐行累加int index = i;      //字符串s在该行对应的起始位置if (i == 0) {       //第0行,只有下角int j = 2 * numRows - 2 * i - 2;      //下角间隔while (index < len) {save.push_back(s[index]);index += j;}}else if (i == numRows - 1) {       //最后一行,只有上角while (index < len) {int j = 2 * i;              //上角间隔save.push_back(s[index]);index += j;}}else {                          //剩下的情况int j1 = 2 * numRows - 2 * i - 2;       //下角间隔int j2 = 2 * i;                         //上角间隔//先先下角再上角while (index < len) {save.push_back(s[index]);index += j1;if (index < len) {save.push_back(s[index]);index += j2;}else{break;                          //越界}}}cout << save << endl;}return save;}
};

看题解

en——在看人家的代码时发现了,人家初始话vector<string>时只指定了大小,而我又用string()初始化了一遍,优化自己的代码如下

class Solution {
public:string convert(string s, int numRows) {vector<string> c(numRows);int j = 0;string save;int len = s.size();while (j < len) {for (int i = 0; i < numRows && j < len; i++)            //竖向【从0~numRows-1】c[i] += s[j++];for (int i = numRows - 2; i > 0 && j < len; i--)          //斜向【从numRows-2~1】      c[i] += s[j++];}for (int i = 0; i < numRows; i++)                            //合并save += c[i];return save;}
};

http://www.dtcms.com/a/286919.html

相关文章:

  • GI6E 加密GRID電碼通信SHELLCODE載入
  • CCF编程能力等级认证GESP—C++3级—20250628
  • 操作系统-处理机调度和死锁进程同步
  • 基于Qwen2.5-3B-Instruct的LoRA微调与推理实战指南
  • 多线程-3-线程同步
  • HTTPie: 开发者友好的http客户端工具
  • 数据排序
  • 特种作业操作证(制冷空调)的考试科目有哪些?
  • Xilinx Zynq:一款适用于软件定义无线电的现代片上系统
  • 使用 C# 实现移动加权平均(Weighted Moving Average)算法
  • java基础-5 : 面向对象
  • python网络爬虫(第三章/共三章:驱动浏览器窗口界面,网页元素定位,模拟用户交互(输入操作、点击操作、文件上传),浏览器窗口切换,循环爬取存储)
  • RPG60.生成可拾取物品
  • 拓扑排序/
  • 安卓Android项目 报错:系统找不到指定文件
  • Python编程:从入门到实践
  • rpa机器人流程自动化软件公司是做什么的?如何选择RPA厂商?简要介绍RPA技术、应用场景和未来趋势
  • Shell变量操作
  • Linux内核设计与实现 - 第4章 进程的调度
  • 函数返回值问题,以及返回值的使用问题(c/c++)
  • [FDBUS4.2] watcher的使用
  • STM32-CAN
  • vs openssl编译提示无法打开文件“libssl.lib”或“libcrypto.lib”
  • 理解 VMA 与 LMA
  • 【实战】Dify从0到100进阶--文档解读(8)文档列表节点
  • 深入剖析 Delta Live Tables (DLT):声明式数据管道的核心原理与底层实现
  • git:tag标签远程管理
  • 公贝固定资产管理系统对接HR、财务及采购系统的方案与效益
  • 【实用工具】HDCleaner:高效、安全、免费的系统清洁工具,免费的电脑清理垃圾神器,20秒扫出20G垃圾!
  • LP-MSPM0G3507学习--05中断及管脚中断