LeetCode#4 ZigZag Conversion
今日もやった。受け取った文字列を指定された行数でジグザグに配置したものを変えす。説明が難しい。
たとえば、"あいうえおかきくせこさしすせそ" という文字列と3を引数に受け取ったら、
になる。行数が4で指定されたら
になる。
公式の問題を読んだほうが良いかもしれない。
解いたコードがこれ。
ジグザグが一回りする文字数は、2 * numRows - 2で求められる。
上から1行ごとに計算していくとよさそうだった。
class Solution { func convert(_ s: String, _ numRows: Int) -> String { if numRows == 1 {return s} let length:Int = s.count let cycleLen:Int = 2 * numRows - 2 var ans:String = "" for i in 0..<numRows { for j in stride(from: 0, to: length - i, by: cycleLen) { ans.append(s[s.index(s.startIndex, offsetBy: i + j)]) if (i != 0) && (i != numRows - 1) && (j + cycleLen - i < length) { ans.append(s[s.index(s.startIndex, offsetBy: j + cycleLen - i)]) } } } return ans } }
この方法の他にもソートする方法があるらしい。