2014年2月10日 星期一

[leetcode] ZigZag Conversion

http://oj.leetcode.com/problems/zigzag-conversion/ 

想不出遞迴要怎麼寫,直接計算新字串中每個位置是在原本的字串的哪裡。把ZigZag看成一堆V的樣子的話,每個block會有2 + (nRows - 2) * 2 = blockSize個char。第i個block的第一個char的index會在原本字串的blockSize * i位置。這同時也是ZigZag最上面那行,也就是相當於新字串的最前面幾個char。

接下來每個V block裡面的index都是相對這個去推算出來。第i-th block的index是
i * blockSize
i * blockSize + 1,  i * blockSize + (blockSize - 1)
i * blockSize + 2,  i * blockSize + (blockSize - 2)
i * blockSize + 3,  i * blockSize + (blockSize - 3)
  ...
i * blockSize + nRows - 1

然後可以發現左邊col的規則就是i * blocksize + row,然後除了第一個row和最後一個row,其他的char右邊都還會有第二個char要填。

沒有留言: