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

【算法】模拟算法——Z字形变换(medium)

题解:模拟算法——Z字形变换(medium)

目录

  • 1.题目
  • 2.题解
  • 3.参考代码
  • 4.总结

1.题目

题目链接:LINK
在这里插入图片描述

2.题解

利用模拟,来解决问题。

首先创建出一个O(numRows*n)的数组来,并按照题目要求把每个字符按顺序填进去。

这里以numRows = 4,字符串s = "abcdefghijk"为例来演示如下:
在这里插入图片描述
然后我们按每行挨个把字符加进去就行了,除了很浪费空间…

所以,我们可以总结规律来进行优化:
在这里插入图片描述
规律可以分为两部分:
第一部分是第一行和最后一行,满足如下特点:
下标从numRows-1开始,且后一个比前一个多d
第二部分是中间那些行,满足如下特点:
两两一组,下标从{k,d-k}开始,下一组比前一组多d

图解如下:
在这里插入图片描述

3.参考代码

class Solution {
public:string convert(string s, int numRows) {if(numRows == 1) return s;int n = s.size();string ret;int d = 2*numRows - 2;//先处理第一行for(int i = 0; i < n; i+=d){ret+=s[i];}//再处理中间一行for(int i = 1; i < numRows - 1; i++)//标识行{for(int j = i,k = d-i;j < n || k < n;j+=d,k+=d)//这个地方为什么用||来判定是否结束?防止一个条件满足了,另一个不满足从而导致漏字符的情况{if(j < n) ret+=s[j];//上面判断结束条件有可能是越界的,因而在加入之前应该先判断一下if(k < n) ret+=s[k];}}//处理最后一行for(int i = numRows-1; i < n; i+=d){ret+=s[i];}return ret;}
};

4.总结

大部分的模拟题如果要做优化,大概就是去找其中的规律。


EOF

http://www.lryc.cn/news/358865.html

相关文章:

  • 上位机图像处理和嵌入式模块部署(f103 mcu获取唯一id)
  • 运筹学_3.运输问题(特殊的线性规划)
  • 科研项目书写作学习(持续更新中...)
  • 男士内裤哪个品牌好一点?2024热门男士内裤推荐
  • Llama模型家族之RLAIF 基于 AI 反馈的强化学习(六) RLAIF 代码实战
  • 计算机tcp/ip网络通信过程
  • 42.开发中对String.format()的使用之空位补齐
  • 通用代码生成器应用场景四,跨编程语言翻译
  • β-烟酰胺单核苷酸(NMN)功能不断得到验证 市场规模呈增长态势
  • 深入理解 Go 语言中的字符串不可变性与底层实现
  • 采购订单审批和取消例子
  • PHP:集成Xunsearch生成前端搜索骨架
  • ThreadLocal详解,与 HashMap 对比
  • flask流式接口
  • MatLab命令行常用命令记录
  • Linux —— MySQL操作(1)
  • TCP四次握手与http协议版本区别
  • 【机器学习】洞悉数据奥秘:决策树算法在机器学习中的魅力
  • redis(17):什么是布隆过滤器?如何实现布隆过滤器?
  • STM32自己从零开始实操03:输出部分原理图
  • Unity中将图片做成Prefab的步骤
  • Web前端三大主流框架:React、Vue和Angular
  • 安全风险 - 检测设备是否为模拟器
  • maven的下载以及配置的详细教程(附网盘下载地址)
  • Unity3D 主城角色动画控制与消息触发详解
  • 【Endnote】如何在word界面加载Endnote
  • 优化CPU占用率及内存占用2
  • C语言(字符和字符串函数)2
  • 【数据结构与算法 | 栈篇】力扣20,150
  • node依赖安装的bug汇总