[leetcode]ZigZag Conversion

水题。主要就是画画图,找找规律。稍微要注意的是:1. nRow为1的情况;2. 采用变量index方便边界判断

public class Solution {

    public String convert(String s, int nRows) {

        StringBuilder sb = new StringBuilder();

        if (nRows == 1) return s;

        // nRows >= 2

        for (int i = 0; i * (2 * nRows - 2) < s.length(); i++)

        {

            sb.append(s.charAt(i * (2 * nRows - 2)));

        }

        

        for (int i = 1; i < nRows - 1; i++)

        {

        	for (int j = 0;; j++)

            {

        		int index = j * (2 * nRows - 2) - i;

        		if ( index > 0 && index < s.length())

        		{

        			sb.append(s.charAt(index));

        		}

        		index = j * (2 * nRows - 2) + i;

        		if ( index > 0 && index < s.length())

        		{

        			sb.append(s.charAt(index));

        		}

        		else

        		{

        			break;

        		}

            }

        }

        

        // last

        if (nRows != 0 && nRows != 1)

        {

	        for (int i = 0; i * (2 * nRows - 2) + nRows - 1 < s.length(); i++)

	        {

	        	sb.append(s.charAt(i * (2 * nRows - 2) + nRows - 1));

	        }

        }

        

        return sb.toString();

    }

}

第二刷,先找规律,写公式,然后写代码,要注意行数为1的情况:

class Solution {

public:

    string convert(string s, int nRows) {

        if (nRows == 1) return s;

        string res;

        int inc = (nRows - 1) * 2;

        for (int i = 0; i < nRows; i++)

        {

            for (int j = i; j < s.length(); j += inc)

            {

                res.push_back(s[j]);

                if (i == 0 || i == nRows - 1)

                    continue;

                if (j + inc - i * 2 < s.length())

                    res.push_back(s[j + inc - i * 2]);

                    

            }

        }

        return res;

    }

};

  

你可能感兴趣的:(conversion)