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