螺旋输出二维矩阵
2012-08-12 17:24
274 查看
1. 题目:顺时针螺旋输出二维矩阵。
2. 分析:螺旋输出二维矩阵,每次剥除最外层的数据,下次再输出里面的数据。很容易想到,这个可以用递归实现,在输出一圈时,输出顺序为:topLeft-->topRight-->bottomRight-->bottomLeft-->topLeft。在递归程序中怎样计算每一个元素的下标这个是关键。
3. 代码:
4. 分析:这里巧妙的使用了一个参数k,使得很容易计算出数据的下标;这个尾递归程序可以很容易地改成迭代程序。注意递归的终止条件和矩阵下标的计算方法。在计算矩阵下标时巧妙地使用k。
5. 参考文章:
http://www.leetcode.com/2010/05/printing-matrix-in-spiral-order.html
2. 分析:螺旋输出二维矩阵,每次剥除最外层的数据,下次再输出里面的数据。很容易想到,这个可以用递归实现,在输出一圈时,输出顺序为:topLeft-->topRight-->bottomRight-->bottomLeft-->topLeft。在递归程序中怎样计算每一个元素的下标这个是关键。
3. 代码:
#include<iostream> #include<cassert> using namespace std; #define ROW 5 #define COL 4 //使用参数k可以巧妙地计算每一个元素的位置 void print_spiral(int mat[][COL], int m, int n, int k) { if (m <= 0 || n <= 0) return; if (m == 1) { for (int j = 0; j < n; j++) cout << mat[k][k+j] << " "; return; } if (n == 1) { for (int i = 0; i < m; i++) cout << mat[k+i][k] << " "; return; } // print from top left for (int j = 0; j < n - 1; j++) cout << mat[k][k+j] << " "; // print from top right for (int i = 0; i < m - 1; i++) cout << mat[k+i][k+n-1] << " "; // print from bottom right for (int j = 0; j < n - 1; j++) cout << mat[k+m-1][k+n-1-j] << " "; // print from bottom left for (int i = 0; i < m - 1; i++) cout << mat[k+m-1-i][k] << " "; //尾递归可以改成循环的形式 //每次剥去最外面的一层数字,下一次m-2,n-2,k+1 print_spiral(mat, m-2, n-2, k+1); } void print_spiral_helper(int mat[][COL], int m, int n) { print_spiral(mat, m, n, 0); } int main() { int matrix[ROW][COL]={1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20}; print_spiral_helper(matrix,ROW,COL); }
4. 分析:这里巧妙的使用了一个参数k,使得很容易计算出数据的下标;这个尾递归程序可以很容易地改成迭代程序。注意递归的终止条件和矩阵下标的计算方法。在计算矩阵下标时巧妙地使用k。
5. 参考文章:
http://www.leetcode.com/2010/05/printing-matrix-in-spiral-order.html
相关文章推荐
- 19.把1~100存到二维数组a[10][10]中,并按二维矩阵形式输出
- 矩阵顺时针螺旋输出2种不同的方法。
- Java 实现顺时针螺旋二维数组输出
- 矩阵顺时针螺旋输出2种不同的方法。
- matlab 二维矩阵输出到文件 文件名为变量
- 利用二维int型数组表达一个矩阵,创建该数组并将其元素打印输出
- C语言输出螺旋矩阵
- 输出螺旋矩阵
- 螺旋输出N*N矩阵
- 从文件中读取一个二维矩阵,,然后把非零元素放入链表中,然后用链表输出矩阵
- 编程题之--打印二维螺旋矩阵
- java逆时针螺旋输出矩阵
- N×N矩阵螺旋打印输出
- 输出螺旋矩阵(二)
- 螺旋输出N*N矩阵
- 输出螺旋矩阵(二)
- 输出双螺旋矩阵
- 用指针实现二维矩阵的输入与输出
- Leet Code 54 Spiral Matrix - 螺旋输出矩阵 - Java
- 二维通道下输入和输出一个矩阵