> 简洁易懂讲清原理,讲不清你来打我~

输入字符串,按下右上下右上排列后输出字符串
![在这里插入图片描述](https://img-blog.csdnimg.cn/4578280a7c1848c2bdcbc7efceb1a983.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/1becba7e5a5c4c16891fddddf713d6e7.png)

> 模拟

简单的思路
利用字符串数组模拟Z字形,从左到右遍历按下=》右上=》下=》右上填充字符串数组,最后按行输出Z字形字符串数组

精准的定义
Z是要填充的字符串数组
i是要填充的字符下标s
down是向下标志
row是字符要填充在哪一行
ans是按行输出Z的结果

```cpp
class Solution {
public:
string convert(string s, int numRows) {

if(numRows==1)return s;
vector<string>Z(min(numRows,(int)s.size()));//Z是要填充的字符串数组
bool down =true;//down是向下标志
int row=0;//row是字符要填充在哪一行
string ans;//ans是按行输出Z的结果

for(int i=0;i<s.size();i++){
//i是要填充的字符的下标
Z[row]+=s[i];
//边界
if(row==numRows-1&&down||row==0&&!down){
down=!down;
}
row+=down?1:-1;
}
//按行输出Z的结果
for(auto a:Z){
ans+=a;
}
return ans;
}
};
```

踩过的坑

```cpp
if(numRows==1)return s;

min(numRows,(int)s.size())
```

> 喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~

 

posted on 2021-07-24 00:01  offer快到碗里来~  阅读(41)  评论(0)    收藏  举报