TypechoJoeTheme

IT技术分享

统计

[LeetCode 6] ZigZag Conversion [C#] [Runtime : 162 MS]

2017-05-31
/
0 评论
/
655 阅读
/
正在检测是否收录...
05/31

1. Description

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);

2. Example

convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

3. Code

public class Solution
{
    public string Convert(string s, int numRows)
    {
        if (numRows == 1)
        {
            return s;
        }

        var sb = new StringBuilder(s.Length);

        var stepLength = 2 * (numRows - 1);

        var block = (s.Length - 1) / stepLength + 1;

        for (var i = 0; i < numRows; i++)
        {
            for (var j = 0; j <= block; j++)
            {
                if (i > 0 && i < numRows - 1 && stepLength * j - i > 0 && stepLength * j - i < s.Length)
                {
                    sb.Append(s[stepLength * j - i]);
                }
                if (stepLength * j + i < s.Length)
                {
                    sb.Append(s[stepLength * j + i]);
                }
            }
        }

        return sb.ToString();
    }
}
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTest
{
    [TestClass]
    public class LeetCode05
    {
        [TestMethod]
        public string Convert(string s, int numRows)
        {
            if (numRows == 1)
            {
                return s;
            }

            var sb = new StringBuilder(s.Length);

            var stepLength = 2 * (numRows - 1);

            var block = (s.Length - 1) / stepLength + 1;

            for (var i = 0; i < numRows; i++)
            {
                for (var j = 0; j <= block; j++)
                {
                    if (i > 0 && i < numRows - 1 && stepLength * j - i > 0 && stepLength * j - i < s.Length)
                    {
                        sb.Append(s[stepLength * j - i]);
                    }
                    if (stepLength * j + i < s.Length)
                    {
                        sb.Append(s[stepLength * j + i]);
                    }
                }
            }
            return sb.ToString();
        }
    }
}

4. Submission Details

5. Runtime Distribution

Array
朗读
赞 · 0
版权属于:

IT技术分享

本文链接:

https://idunso.com/archives/193/(转载时请注明本文出处及文章链接)