题目:
思路:
懂得转换,nums[x / n][x % n] =》将二维数组/矩阵映射成一维数组
具体代码:
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int m = nums.length;
int n = nums[0].length;
if (m * n != r * c) {
return nums;
}
int[][] ans = new int[r][c];
for (int x = 0; x < m * n; ++x) {
//映射
ans[x / c][x % c] = nums[x / n][x % n];
}
return ans;
}
}
延申题目-74题:
思路:
思路:根据题目给出的特性,将二维矩阵/数组翻转成一维数组。
具体代码:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int low = 0, high = m * n - 1;
while (low <= high) {
int mid = (high - low) / 2 + low;
//关键代码
int x = matrix[mid / n][mid % n];
if (x < target) {
low = mid + 1;
} else if (x > target) {
high = mid - 1;
} else {
return true;
}
}
return false;
}
}
延申:
844. 比较含退格的字符串https://leetcode.cn/problems/backspace-string-compare/
补充,上面这题挺巧妙的,比如说使用栈来表示回退。类比我们流浪器的回退和前进按钮其实也是使用栈来实现的!!!
具体代码:
class Solution {
public boolean backspaceCompare(String S, String T) {
return build(S).equals(build(T));
}
public String build(String str) {
StringBuffer ret = new StringBuffer();
int length = str.length();
for (int i = 0; i < length; ++i) {
char ch = str.charAt(i);
if (ch != '#') {
ret.append(ch);
} else {
if (ret.length() > 0) {
ret.deleteCharAt(ret.length() - 1);
}
}
}
return ret.toString();
}
}