/**
* 顺时针打印一个矩阵
*/
public class ClockwiseOutput {
/**
* 适合于所有矩阵
* @param num
* @param startx
* @param endx
* @param starty
* @param endy
*/
public void printMatrix(int[][] num, int startx, int endx, int starty, int endy) {
if (startx == endx) {
for (int i = starty; i <= endy; i++)
System.out.print(num[i][startx] + " ");
return;
}
if (starty == endy) {
for (int i = startx; i <= endx; i++)
System.out.print(num[starty][i] + " ");
return;
}
if (startx > endx || endx <= 0 || starty > endy || endy <= 0)
return;
for (int i = startx; i <= endx; i++) {
System.out.print(num[startx][i] + " ");
}
for (int i = starty + 1; i <= endy; i++) {
System.out.print(num[i][endx] + " ");
}
for (int i = endx - 1; i >= startx; i--) {
System.out.print(num[endy][i] + " ");
}
for (int i = endy - 1; i > starty; i--) {
System.out.print(num[i][startx] + " ");
}
printMatrix(num, startx + 1, endx - 1, starty + 1, endy - 1);
}
/**
* 适合于行数和列数相等的矩阵
* @param num
* @param start
* @param end
*/
public void output(int[][] num, int start, int end) {
if (start > end || end <= 0)
return;
for (int i = start; i <= end; i++) {
System.out.print(num[start][i] + " ");
}
for (int i = start + 1; i <= end; i++) {
System.out.print(num[i][end] + " ");
}
for (int i = end - 1; i >= start; i--) {
System.out.print(num[end][i] + " ");
}
for (int i = end - 1; i > start; i--) {
System.out.print(num[i][start] + " ");
}
output(num, start + 1, end - 1);
}
public void print(int[][] num, int width, int height) {
//剑指offer上面的解法,比较复杂
}
public static void main(String[] args) {
ClockwiseOutput clock = new ClockwiseOutput();
int[][] nums = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12},
{13, 14, 15} };
// clock.print(nums, 3, 4);
clock.printMatrix(nums, 0, 2, 0, 4);
System.out.println();
int[][] nums2 = { {1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}};
clock.print(nums2, 5, 4);
clock.printMatrix(nums2, 0, 4, 0, 3);
System.out.println();
int[][] nums3 = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
clock.print(nums3, 4, 3);
clock.printMatrix(nums3, 0, 3, 0, 2);
System.out.println();
int[][] nums4 = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
clock.print(nums4, 4, 4);
// clock.output(nums4, 0, 3);
clock.printMatrix(nums4, 0, 3, 0, 3);
System.out.println();
int[][] nums5 = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16},
{17, 18, 19, 20}};
clock.print(nums5, 4, 5);
clock.printMatrix(nums5, 0, 3, 0, 4);
System.out.println();
}
}
顺时针打印矩阵
最新推荐文章于 2024-02-16 21:12:16 发布