[LeetCode] 6. ZigZag Converesion 之字型转换字符串
2024-10-19 21:28:00
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"
.
这道题就是看坐标的变化,找规律并分块处理。参考:爱做饭的小莹子
规律:第一行和最后一行,就是按照2n-2的顺序一点点加的。斜着那条线的字的位置是当前列j+(2n-2)-2i(i是行的index)。
Java:
public String convert(String s, int nRows) {
if(s == null || s.length()==0 || nRows <=0)
return "";
if(nRows == 1)
return s; StringBuilder res = new StringBuilder();
int size = 2*nRows-2;
for(int i=0;i<nRows;i++){
for(int j=i;j<s.length();j+=size){
res.append(s.charAt(j));
if(i != 0 && i != nRows - 1){//except the first row and the last row
int temp = j+size-2*i;
if(temp<s.length())
res.append(s.charAt(temp));
}
}
}
return res.toString();
}
Python:
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows == 1:
return s
step, zigzag = 2 * numRows - 2, ""
for i in xrange(numRows):
for j in xrange(i, len(s), step):
zigzag += s[j]
if 0 < i < numRows - 1 and j + step - 2 * i < len(s):
zigzag += s[j + step - 2 * i]
return zigzag
C++:
class Solution {
public:
string convert(string s, int nRows) {
if (nRows <= 1) return s;
string res = "";
int size = 2 * nRows - 2;
for (int i = 0; i < nRows; ++i) {
for (int j = i; j < s.size(); j += size) {
res += s[j];
int tmp = j + size - 2 * i;
if (i != 0 && i != nRows - 1 && tmp < s.size()) res += s[tmp];
}
}
return res;
}
};
All LeetCode Questions List 题目汇总
最新文章
- linux命令大全之ln命令详解(创建软链接和硬链接)
- NET基础(4):引用类型和值类型
- 浅谈HTTP中Get与Post的区别(转)
- Tcc学习笔记(一) 开篇
- VC++ 6.0使用定时器SetTimer;
- POJ 1503
- 【Unity Shaders】学习笔记——SurfaceShader(一)认识结构
- C# 时间戳
- [置顶] stax解析xml文档的6种方式
- Shell学习笔记 - 运算符
- zendstudio正则匹配查询
- Android应用程序中的多个Activity的显示创建和调用
- XSS漏洞的分类
- Android下拉刷新上拉载入控件,对全部View通用!
- openWRT自学---自己编译的第一个 backfire10.03 版本的过程记录(转)
- springmvc框架下ajax请求传参数中文乱码解决
- C++ for循环语句
- Effective Java 第三版笔记(目录)
- 转://Oracle补丁及opatch工具介绍
- 剑指 offer 面试题31 连续子数组的最大和(动态规划)