算法练习(4):ZigZag Conversion
来源:互联网 发布:大容量背包 知乎 编辑:程序博客网 时间:2024/06/03 19:51
先上题
这道题我第一眼看根本没看懂,我一开始还以为全部竖着从上到下写,然后偶数列空一个写一个。。。唉,然后就傻傻的按那思路写了代码,当然没过。后来上网查了一下才知道是要Z型转置,也就是把Z按左斜45度线对称的形状。好吧,弯路走的有点多,还好也不难。
分析与思路:第一想法肯定是用个二维char数组把字符串按这个图形规规矩矩走一遍,然后双层循环把非空字符按左右上下拼接。这个方法也不是不能行,就是二维数组的列数要提前算好跟行数以及字符串总长度的关系,用个flag标记往下还是往上走。挺麻烦的,我一开始确实走了这条路,很容易越界什么的,列数没算对吧。后来我想了一下,作了两个优化,第一点是可以改用vector,这样就不用算二维数组的列数了,第二点就是在往上走的时候我根本就不用在二维数组中真的斜上走啊!因为最后读取是是同一行内从左到右读取非空字符,根本就可以直接直上走的。这样问题就被简化了,不用再往上走的时候列数加行数减,只需要根据是否到边界判断一下flag的值,然后根据flag的值判断现在该行增还是行减,列数根本都不用管,因为可以用vector的push_back(char)。代码实现如下:
class Solution {public:string convert(string s, int numRows) {if (numRows == 1) return s;vector<char>* temp=new vector<char>[numRows];bool flag = 1;int nowRow = 0;for (int i = 0; i < s.length(); i++) {temp[nowRow].push_back(s[i]);if (flag) {if (nowRow + 1 == numRows) {nowRow--;flag = 0;}else {nowRow++;}}else {if (nowRow - 1 == -1) {nowRow++;flag = 1;}else {nowRow--;}}}string result(s.length(), ' ');for (int i = 0; i < numRows; i++) {for (int j = 0; j < temp[i].size(); j++) {cout << temp[i][j];}cout << endl;}int k = 0;for (int i = 0; i < numRows; i++) {for (int j = 0; j < temp[i].size(); j++) {result[k++] = temp[i][j];}}return result;}};
阅读全文
0 0
- 算法练习(4):ZigZag Conversion
- 【LeetCode算法练习(C++)】 ZigZag Conversion
- ZigZag Conversion算法
- ZigZag Conversion(java)
- ZigZag Conversion(python)
- ZigZag Conversion(算法分析week4)
- LeetCode OJ算法题(六):ZigZag Conversion
- [编程练习]ZigZag Conversion <LeetCode-6>
- 算法练习6. ZigZag Conversion 把一串字符反N方向n行排列
- 【LeetCode006算法/编程练习C++】ZigZag Conversion //折形string重新排序
- LeetCode(6) ZigZag Conversion
- ZigZag Conversion (C实现)
- 锯齿转变(ZigZag Conversion)
- 6. ZigZag Conversion (Easy)
- LeetCode (6)ZigZag Conversion
- 第十七周(ZigZag Conversion)
- 6. ZigZag Conversion(Medium)
- LeetCode算法题之ZigZag Conversion
- QSet转换排序
- 为方便储户,某银行拟开发计算机储蓄系统。
- 高频布线注意事项
- Linux下的ZooKeeper安装(单机环境和集群以及启动时出现的异常)
- QSting 格式化
- 算法练习(4):ZigZag Conversion
- java中Atomic类之AtomicBoolean
- JRE System Library [JavaSE-1.7](unbound)
- excel中F1~F12的使用,全会的都是大神,不知道你离大神还差几步
- nginx配置location总结及rewrite规则写法
- Spring AOP自定义注解实现权限控制
- Android视图动画浅析
- 差分阻抗和特性阻抗
- Linux下安装Oracle11G详细过程