string-6.ZigZag Conversion
来源:互联网 发布:js实现下拉菜单 编辑:程序博客网 时间:2024/05/29 03:55
题目描述:
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: "PAHNAPLSIIGYIR"
string convert(string text, int nRows);
Write the code that will take a string and make this conversion given a number of rows:
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
题目解析:
1. 此题的意思是:输入一个字符串str和该字符串行数row,该str其实是按照‘之’字形来读取的,现在需要改为按照行来读取。
2. 思路就是:找规律。以上述例子中的str为例,字符串占3行,“payp”可以看做第一组,“alis”看做第二组。其实就是每组第一行和最后一行各有一个字符,中间行数有两个字符,从而可以算出每组的字符个数是: memNum=2+2*(row-2)。
(1.)设置index = 0,第一行的字符依次是:str[index*memNum+0],index++,直到index*memNum>=size结束。
(2.)注意第一行的计算方法是:index*memNum+0 ,最后一行的计算方法是:index*memNum+row-1。第二行到第n-1行每组有两个,第index组的计算方法是:index*memNum + i (ib表示当前行数) 和 index*menNum + i + 2*(row-i-1)。
代码如下:
// 时间复杂度是O(n)。空间复杂度是O(1)。
class Solution {public: string convert(string s, int numRows) {if(numRows < 2 || s.empty()) return s; // 利用规律来写出字符串 int size = s.size();int nMembNum = 2+2*(numRows-2);string strOut;for(int i=0; i<numRows; ++i){int index = 0, mult = 0;if(i==0 || i== numRows-1){while(index < size){index = mult*nMembNum + i;if(index < size)strOut.append(1, s[index]);++mult;}}else{while(index < size){index = mult*nMembNum + i;if(index < size)strOut.append(1, s[index]);index = mult*nMembNum + i + 2*(numRows-i-1);if(index < size)strOut.append(1, s[index]);++mult;}}}return strOut; }};
- string-6.ZigZag Conversion
- //6. ZigZag Conversion --String类型
- Leetcode - string - ZigZag Conversion
- **(leetcode_ string) ZigZag Conversion
- [leetcode][string] ZigZag Conversion
- String——zigzag-conversion
- LeetCode 6. ZigZag Conversion
- LeetCode --- 6. ZigZag Conversion
- LeetCode 6.ZigZag Conversion
- [Leetcode] 6. ZigZag Conversion
- 6.ZigZag Conversion
- 6. ZigZag Conversion
- 6. ZigZag Conversion
- 【leetcode】6. ZigZag Conversion
- 6.ZigZag Conversion
- 6. ZigZag Conversion
- 6.ZigZag Conversion
- [LeetCode] 6.ZigZag Conversion
- 初学者小白HTML入门——分帧标签
- 图像为什么能相减
- spring+hibernate 事务管理
- CSS+HTML实现3D图片旋转效果
- 二分图最大匹配模板【匈牙利;Dinic最大流】
- string-6.ZigZag Conversion
- WPF下给DataGrid自动增加序列号
- divmod数字处理函数
- NotePad++编辑Linux中的文件
- 记转战AI之开篇
- phpstrom快捷键
- LeetCode 448 Find All Numbers Disappeared in an Array
- 在windows7下给vs2015配置dirent.h头文件
- 15.dubbo延迟连接、粘滞连接、令牌验证