索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql)
Github: https://github.com/illuz/leetcode
006.ZigZag_Conversion (Easy)
链接:
题目:https://oj.leetcode.com/problems/zigzag-conversion/
代码(github):https://github.com/illuz/leetcode
题意:
把一个字符串按横写的折线排列。
分析:
直接模拟就行了。
代码:
C++:class Solution {
public:
string convert(string s, int nRows) {
if (nRows == 1) return s;
int step = nRows * 2 - 2, len = s.length();
string ret = "";
// first row
for (int i = 0; i < len; i += step)
ret += s[i];
for (int i = 1; i < nRows - 1; i++) {
for (int j = i; j < len; j += step) {
ret += s[j];
if (j + (step - i * 2) < len)
ret += s[j + (step - i * 2)];
}
}
// last row
for (int i = nRows - 1; i < len; i += step)
ret += s[i];
return ret;
}
};
Java:
public class Solution {
public String convert(String s, int nRows) {
if (nRows == 1) return s;
int step = nRows * 2 - 2, len = s.length();
String ret = "";
// first row
for (int i = 0; i < len; i += step)
ret += s.charAt(i);
for (int i = 1; i < nRows - 1; i++) {
for (int j = i; j < len; j += step) {
ret += s.charAt(j);
if (j + (step - i * 2) < len)
ret += s.charAt(j + (step - i * 2));
}
}
// last row
for (int i = nRows - 1; i < len; i += step)
ret += s.charAt(i);
return ret;
}
}
Python:
class Solution:
# @return a string
def convert(self, s, nRows):
if nRows == 1:
return s
step = nRows * 2 - 2
# first row
ret = s[::step]
for i in range(1, nRows - 1):
for j in range(i, len(s), step):
ret += s[j]
if j + (step - i * 2) < len(s):
ret += s[j + (step - i * 2)]
# last row
ret += s[nRows - 1::step]
return ret