[LeetCode] 006. ZigZag Conversion (Easy) (C++/Java/Python)

索引:[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


你可能感兴趣的:(+基础算法,+Leetcode,=====算法相关=====,Leetcode,题解)