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