z字形变换
解题思路:
直接按行排序,用flag标识是往下走还是往上,直到行数为0或numrows才变。
代码:
public string Convert(string s, int numRows)
{
if(numRows==1||s.Length<numRows)//如果行数等于1或者s的长度小于行数,直接返回s。
return s;
List<StringBuilder> lgx=new List<StringBuilder>();//用一个链表元素为stringbuilder来存储每一行的字符。
for(int i=0;i<numRows;i++)
{
StringBuilder cc=new StringBuilder();
lgx.Add(cc);
}
int row=0;//记录当前在哪一行。
bool flag=false;//在第一行或最后一行的时候要转向。true往下,false往上。
foreach(var temp in s)
{
lgx[row].Append(temp);
if(row==0||row==numRows-1)
flag=!flag;
row+=flag?1:-1;
}//将s中元素分别存放在链表对应行内。
StringBuilder result=new StringBuilder();
foreach( var temp in lgx)
{
result.Append(temp);
}
return result.ToString();
}