8.19-8.25
ZigZag Conversion https://leetcode.com/problems/zigzag-conversion/
Rotate Image https://leetcode.com/problems/rotate-image/
Sqrt(x) <https://leetcode.com/problems/sqrtx/
Symmetric Tree https://leetcode.com/problems/symmetric-tree/
Longest Increasing Subsequence https://leetcode.com/problems/longest-increasing-subsequence/
1 字符串Z字形變換
public String convert(String s, int numRows) {
if (numRows == 1) {
return s;
}
List<StringBuilder> rows = new ArrayList<>();
for (int i = 0; i < Math.min(numRows, s.length()); i++) {
rows.add(new StringBuilder());
}
int curRow = 0;
boolean goDomn = false;
for (char c : s.toCharArray()) {
rows.get(curRow).append(c);
if (curRow == 0 || curRow == numRows - 1) {
goDomn = !goDomn;
}
curRow += goDomn ? 1 : -1;
}
StringBuilder res = new StringBuilder();
for (StringBuilder row : rows) {
res.append(row);
}
return res.toString();
}
2 旋轉圖像
public class RotateImg_48 {
public void rotate(int[][] matrix) {
int tR = 0;
int tC = 0;
int dR = matrix.length - 1;
int dC = matrix[0].length - 1;
while (tR < dR) {
rotateEdge(matrix, tR++, tC++, dR--, dC--);
}
}
private void rotateEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
int times = dC - tC;
int tmp = 0;
for (int i = 0; i != times; i++) {
tmp = matrix[tR][tC + i];
matrix[tR][tC + i] = matrix[dR - i][tC];
matrix[dR - i][tC] = matrix[dR][dC - i];
matrix[dR][dC - i] = matrix[tR + i][dC];
matrix[tR + i][dC] = tmp;
}
}
}
3 x 的平方根
public int mySqrt(int x) {
if (x == 1 || x == 0) {
return x;
}
int start = 1;
int end = x / 2 + 1;
int mid = 0;
while (start <= end) {
mid = start + (end - start) / 2;
if (mid <= x / mid && (mid + 1) > x / (mid + 1)) {
return mid;
}
if (mid > x / mid) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return mid;
}