数据结构与算法之“之”字型打印矩阵和矩阵中找数
目录
1. “之”字型打印矩阵
-
题目描述
-
思路:创建A,B两个点,A往右移,B往下移,当移到最右边和最下边则向下移和右移。AB两点连线即为打印路径,添加个flag判断从下打印还是从上打印即可。
- 代码实现
public class Code_ZigZagPrintMatrix {
public static void printMatrixZigZag(int[][] matrix) {
int aR = 0;
int aC = 0;
int bR = 0;
int bC = 0;
int endR = matrix.length - 1;
int endC = matrix[0].length - 1;
boolean fromUp = false;
while (aR != endR + 1) {
printLevel(matrix, aR, aC, bR, bC, fromUp);
aR = aC == endC ? aR + 1 : aR;
aC = aC == endC ? aC : aC + 1;
bC = bR == endR ? bC + 1 : bC;
bR = bR == endR ? bR : bR + 1;
fromUp = !fromUp;
}
System.out.println();
}
public static void printLevel(int[][] m, int aR, int aC, int bR, int bC,
boolean f) {
if (f) {
while (aR != bR + 1) {
System.out.print(m[aR++][aC--] + " ");
}
} else {
while (bR != aR - 1) {
System.out.print(m[bR--][bC++] + " ");
}
}
}
public static void main(String[] args) {
int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
printMatrixZigZag(matrix);
}
}
- 编译结果
在行列都排好序的矩阵中找数
-
题目描述
-
思路:从右上角出去,当找的数比当前数大时,则向下走,如果找的数比当前数小数则向左走,没找到就返回false。
- 代码实现
public class Code_FindNumInSortedMatrix {
public static boolean isContains(int[][] matrix, int K) {
int row = 0;
int col = matrix[0].length - 1;
while (row < matrix.length && col > -1) {
if (matrix[row][col] == K) {
return true;
} else if (matrix[row][col] > K) {
col--;
} else {
row++;
}
}
return false;
}
public static void main(String[] args) {
int[][] matrix = new int[][] { { 0, 1, 2, 3, 4, 5, 6 },// 0
{ 10, 12, 13, 15, 16, 17, 18 },// 1
{ 23, 24, 25, 26, 27, 28, 29 },// 2
{ 44, 45, 46, 47, 48, 49, 50 },// 3
{ 65, 66, 67, 68, 69, 70, 71 },// 4
{ 96, 97, 98, 99, 100, 111, 122 },// 5
{ 166, 176, 186, 187, 190, 195, 200 },// 6
{ 233, 243, 321, 341, 356, 370, 380 } // 7
};
int K = 233;
System.out.println(isContains(matrix, K));
}
}