上期
链接
自己答案
将二维数组遍历转为字符串,元素之间按照半角逗号间隔,将目标数据也转为半角逗号在左右的字符串,利用字符串的包含函数contains求解。该方法对于存储空间要求小,但是运行时间较慢。
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
boolean result = false;
String tmp = "";
String tmpTarget = ","+target+",";
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
tmp=tmp+","+matrix[i][j]+",";
}
}
return tmp.contains(tmpTarget);
}
}
答案
官方的方法比较好哈哈,理解起来就是,从二维数组的右上角开始判断当前数组内的数与目标数大小。
- 如果数组内的数比目标数大,则取当前数组数左边一位再与目标数比较;
- 如果数组内的数比目标数小,则取当前数组数下边一位再与目标数比较;
找到相等的就返回true,没找到返回false即可。
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int rows = matrix.length, columns = matrix[0].length;
int row = 0, column = columns - 1;
while (row < rows && column >= 0) {
int num = matrix[row][column];
if (num == target) {
return true;
} else if (num > target) {
column--;
} else {
row++;
}
}
return false;
}
其他答案
啥也不说了直接暴力循环遍历查找。
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int rows = matrix.length, columns = matrix[0].length;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (matrix[i][j] == target) {
return true;
}
}
}
return false;
}
本期
问题
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例
输入:s = "We are happy."
输出:"We%20are%20happy."
限制
0 <= s 的长度 <= 10000