官方做任务网站,集团建设网站,打开这个网站你会回来感谢我的,稿定设计官网入口题解#xff1a;模拟算法——Z字形变换(medium) 目录 1.题目2.题解3.参考代码4.总结 1.题目
题目链接#xff1a;LINK
2.题解
利用模拟#xff0c;来解决问题。
首先创建出一个O(numRows*n)的数组来#xff0c;并按照题目要求把每个字符按顺序填进去。
这里以numRows… 题解模拟算法——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; id){rets[i];}//再处理中间一行for(int i 1; i numRows - 1; i)//标识行{for(int j i,k d-i;j n || k n;jd,kd)//这个地方为什么用||来判定是否结束防止一个条件满足了另一个不满足从而导致漏字符的情况{if(j n) rets[j];//上面判断结束条件有可能是越界的因而在加入之前应该先判断一下if(k n) rets[k];}}//处理最后一行for(int i numRows-1; i n; id){rets[i];}return ret;}
};4.总结
大部分的模拟题如果要做优化大概就是去找其中的规律。 EOF