概述
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"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
分析
如果还是没明白题目的意思,看下图吧……
题意是:给你一个字符串,他是以Z形式表示出来的字符串顺序,然后你以行的形式读出来。给定了字符串的行数。
解题思路:我们发现第一行和最后一行都很好处理,就是每次读取j+2*nRows-2,就是中间的行则需要单独处理。
正如以上的例子,我们发现,我们可以每次选区PAYP作为一个单元处理。就是选取nRows+nRows-2=2nRows-2个长度处理。
那么中间元素的位置关系是j+2*nRows-2i-2(i表示第几行)
ok,代码如下:
- public String convert(String s, int nRows)
- {
- if (s == null || nRows == 1)
- return s;
- int len = s.length();
- if (len <= nRows)
- return s;
- StringBuffer res = new StringBuffer();
- int size = 2 * nRows - 2;//每次处理的长度
- for (int i = 0; i < nRows; i++) {//每一行的元素
- char ch;
- for (int j = i; j < len; j += size) {
- ch = s.charAt(j);
- res.append(ch);
- if (i != 0 && i != nRows - 1) {//如果是中间元素单独处理
- int tmp = j + size - 2 * i;
- if (tmp < len) {
- ch = s.charAt(tmp);
- res.append(ch);
- }
- }
- }
- }
- return res.toString();
- }
最后
以上就是还单身茉莉为你收集整理的6. Z字形变换的全部内容,希望文章能够帮你解决6. Z字形变换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复