题目为
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。
请你实现这个将字符串进行指定行数变换的函数:
解题思路为
按行去存储对应的值,在一个for循环中,将
也就是一列为numRows,一列为numRows-2,但注意后面的numRows-2为倒叙,也就是从下向上的行去存储就行,理解了思路,代码为
public static string Convert(string s, int numRows)
{
Dictionary<int, StringBuilder> dic = new Dictionary<int, StringBuilder>();
for (int i = 0; i < numRows; i++)
{
dic.Add(i, new StringBuilder());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.Length; )
{
//numRows
for (int j = 0; j < numRows; j++)
{
if (i >= s.Length)
{
break;
}
dic[j].Append(s[i]);
i++;
}
for (int w = numRows-2; w >=0; w--)
{
if (i>=s.Length)
{
break;
}
if (w==0||w== numRows)
{
}
else
{
dic[w].Append(s[i]);
i++;
}
}
}
StringBuilder sbRes = new StringBuilder();
for (int i = 0; i < numRows; i++)
{
sbRes.Append(dic[i].ToString());
}
return sbRes.ToString();
}