Monday, September 7, 2015

ZigZag Conversion

1. Example

s= "PAYPALISHIRING"
Zigzag s :

P     A     H     N
A P L  S I   I  G
Y    I      R

|     |     |    |
|  /  |   / |  / |
|     |     |    |

|       |
|    /  |
|  /    |
|       |

2. Implementation

[0]     [4]    [8]       [12] -> row0   0+(numRows+numRows-2)=0+2numRows-2
[1][3][5][7][9][11][13]-> row 1   1+(numRows-row)=
[2]     [6]    [10]     [14]-> row 2   2+(numRows-2+numRows)=2+2numRows-2

[0]         [6]             [12]             [18]->row0= 0+ 2numRows-2
[1]    [5][7]       [11][13]      [17][19]->row1= numRows-1
[2][4]    [8][10]       [14][16]      [20]->row2=numRows-2
[3]         [9]             [15]             [21]->row3= 2+ 2numRows-2

row+4*i
row+(4-row*2)*i
row+4*i
// NOTE: general gap int size = 2*NumRows -2;
// NOTE: specific gap, general gap - 2*row index. bigger row index, closer the gap = gap- row*2 element per each row if (i != 0 && i != numRows-1 && j+size-2*i < s.length() ) res.append(s.charAt(j+size-2*i));
Time:O(n), Sapce:O(n)
public String convert(String s, int numRows)
{
     




      // validate the input 
      //if (s ==null || s.lenght() ==0 )
      //     return null;

      //if (numRows<=0)
      //     return s;
      if (s == null || s.length() == 0 || numRows<=0 )
            return "";

      if (numRows ==1)
            return s;





      
      StringBuilder res = new StringBuilder();
      // NOTE: general gap
      int size = 2*NumRows -2;





      for (int i = 0; i < numRows; i-- )
      {
            //for (int j = 0; i < s.length();j++)
            for (int j = i; j < s.length(); j+=size)
            {



                res.append(s.charAt(j));
                //(i%2 ==0) ? res.add(s.charAt[i+(numRows+(numRows-2))*j]) : res.add(s.charAt[i+(4-i*2)*j]);



                // NOTE: specific gap, general gap - 2*row index. bigger row index, closer the gap = gap- row*2 element per each row
                if (i != 0 && i != numRows-1 && j+size-2*i < s.length() )
                res.append(s.charAt(j+size-2*i));
                

               
            }
      }




      return s.toString();

   

}
3. Similar Ones

No comments:

Post a Comment