大家早上好鸭,新的一天,大家有没有元气满满呢?今天这第一道题,题目就有点云里雾里,下面让我们一起看看吧!
关卡六:Z字形变换
我的分析
这个题读懂题干都不太容易,但是不要慌,题目越长信息越多,我们提取有用信息就行了,给了俩参数一个s一个numRows,一个初始字符串和一个Z形变换的行数,那我们怎么样解决一这题呢?首先只有一个字符所构成的字符串,例如示例3,直接返回就是咯,那么例如示例1和2我们怎么办呢?首先,我们要有numRows个StringBuilder对象,第二步,对字符串s进行遍历取值,完成Z形变换,我这里Z形变换使用的思路就是:定义一个方向变量goingdown,然后用goingdown为false还是true去控制当前存储行的存储位置,实现Z形变换,然后将每一行存储在StringBuilder对象里,最后将StringBuilder转为字符串重新即可。
代码示例
public class Solution {
public string Convert(string s, int numRows) {
if(numRows == 1) return s;
Dictionary<int,StringBuilder> dic = new Dictionary<int,StringBuilder>();
for(int i = 0;i<numRows;i++)
{
dic.Add(i,new StringBuilder());
}
bool goingdown = false;
int currRow = 0;
for(int j = 0;j<s.Length;j++)
{
dic[currRow].Append(s[j]);
if(currRow == 0|| currRow == numRows-1)
{
goingdown = !goingdown;
}
currRow += goingdown?1:-1;
}
StringBuilder sbRes = new StringBuilder();
foreach(var item in dic)
{
sbRes.Append(item.Value);
}
return sbRes.ToString();
}
}