题解 | #顺时针打印矩阵#

顺时针打印矩阵

https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param matrix int整型二维数组 
 * @return int整型一维数组
*/
func printMatrix( matrix [][]int ) []int {
    // write code here
    // 特殊条件排除
    if len(matrix) == 0 {
        return nil  
    }
    
    m, n := len(matrix), len(matrix[0])
    ans := make([]int, m * n)
    // 结果切片起始索引
    index := 0

    // 利用边界收缩
    left, right, up, down := 0, n-1, 0, m-1

    for left <= right && up <= down {
        // 从左往右打印
        for i := left; i <= right; i++ {
            ans[index] = matrix[up][i]
            index++
        }
        // 上面一行打印完了,上边界收缩
        if up = up + 1; up > down {
            break
        }

        // 从上往下打印
        for i := up; i <= down; i++ {
            ans[index] = matrix[i][right]
            index++
        }

        // 右侧一列打印完了,右边界收缩
        if right = right-1; right < left {
            break
        }

        // 从右向左打印
        for i := right; i >= left; i-- {
            ans[index] = matrix[down][i]
            index++
        }

        // 下面一行打印完毕,下边界收缩
        if down = down-1; down < up {
            break
        }

        // 从下往上打印
        for i := down; i >= up; i-- {
            ans[index] = matrix[i][left]
            index++
        }

        // 左边一列打印完毕,左边界收缩
        if left = left+1; left > right {
            break
        }
    }

    return ans
}

分圈进行打印,第一次循环,打印最外圈,分别收缩上、右、下、左边界,直至边界收缩到不合法时结束迭代,所以元素都已经加入到结果切片中了。

全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
码农索隆:有点耳熟,你们是我教过最差的一届
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务