螺旋输出矩阵

<?php
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param matrix int整型二维数组 
 * @return int整型一维数组
 */
function spiralOrder( $matrix )
{
    // write code here
    $count = count($matrix);//行数
    if(empty($count)) return $matrix;
    $array = [];
    $top = $left = 0; //从左上角开始
    $bottom = $count-1; //获取最底层行的键值
    $right = count($matrix[0])-1;//获取第一行最右侧键值
    while($top <= $bottom && $left <= $right){
        //从左向右 1->3
        for($i=$left;$i<=$right;$i++){
            // 把第一行加入数组
            array_push($array,$matrix[$top][$i]);
        }
        //从上到下 6->9
        for($i=$top+1;$i<=$bottom;$i++){ //$top+1 刨去3
            //把每行最右侧的值加入数组
            array_push($array,$matrix[$i][$right]);
        }
        //从右到左 8->7
        for($i=$right-1;$top!=$bottom && $i>=$left;$i--){ //$right-1 刨去9;
            //把最后一行的值加入数组
            array_push($array,$matrix[$bottom][$i]);
        }
        //从下到上 4->5
        for($i=$bottom-1;$left!=$right && $i >=$top+1;$i--){ //$bottom-1 从下往上 刨去7;$top+1 固定第二行;$left!=$right 刨去6
            //从左侧开始 把4和5加入数组
            array_push($array,$matrix[$i][$left]);
        }
        //每循环一圈 向内层逼近
        ++$left;
        ++$top;
        --$right;
        --$bottom;
    }
    return $array;
}

在C语言中,我们可以编写一个函数来实现矩阵的顺时针和逆时针螺旋遍历输出。这里给出一个简单的示例,首先我们创建一个函数`spiralPrint`,它接受一个二维数组`matrix`、其行数`m`和列数`n`作为参数。 ```c #include <stdio.h> // 函数原型 void spiralPrint(int matrix[][n], int m, int n); int main() { // 初始化一个例子矩阵 int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int m = sizeof(matrix) / sizeof(matrix[0]); int n = sizeof(matrix[0]) / sizeof(matrix[0][0]); // 顺时针打印 printf("顺时针螺旋遍历:\n"); spiralPrint(matrix, m, n); // 逆时针打印 printf("\n逆时针螺旋遍历:\n"); spiralPrint(matrix, n, m); // 注意,逆时针需要交换行和列 return 0; } // 漩涡打印函数 void spiralPrint(int matrix[][n], int m, int n) { int startRow = 0, endRow = m - 1, startCol = 0, endCol = n - 1; while (startRow <= endRow && startCol <= endCol) { // 从左上角到右下角 for (int i = startCol; i <= endCol; ++i) { printf("%d ", matrix[startRow][i]); } startRow++; // 从右下角到左上角 if (startRow <= endRow) { for (int i = startRow; i <= endRow; ++i) { printf("%d ", matrix[i][endCol]); } endCol--; } // 从左下角到右上角 if (startRow <= endRow && startCol <= endCol) { for (int i = endCol; i >= startCol; --i) { printf("%d ", matrix[endRow][i]); } endRow--; } // 从右上角到左下角 if (startRow <= endRow) { for (int i = endRow; i >= startRow; --i) { printf("%d ", matrix[i][startCol]); } startCol++; } } } ``` 这个程序首先定义了一个`spiralPrint`函数,它使用四个指针控制当前的行开始和结束以及列的开始和结束。然后按顺时针方向逐层打印矩阵,当某一方向无法继续时,就改变另一个方向,直到遍历完整个矩阵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值