js顺时针打印矩阵

完整代码

let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    //需要遍历的数组arr
    function myfunction(arr, y) {
        let col = arr.length - 1
        //数组的长度-1
        arr.forEach((item, index) => {
            if (index === y) {
                //当前的行数等于最外层的数组行数
                item.forEach((ite, ind) => {
                    if (ind >= y && ind < item.length - y) {
                        //横向顺序打印123和5
                        console.log(ite);
                    }
                })
            } else if (index < col - y && index > y) {
                //打印矩阵最右边的一列
                console.log(item[item.length - 1]);
            } else if (index === col - y) {
                //这是最下面的一行
                item.forEach((ite, ind) => {
                    if (ind >= y && ind < item.length - y) {
                        //反转横向打印数组每一项
                        console.log(item[item.length - 1 - ind]);
                    }
                })
            }
        })
        if (col + 1 > 2 * (y + 1)) {
            //矩阵最左边的一列
            arr.forEach((item, index) => {
                if (index !== 0 && index !== col - y) {
                    //反向打印矩阵最左边的一列
                    console.log(arr[col - y - index][0]);
                }
            })
        }
        if (y < (col + 1) / 2) {
            //判断是否还有层数
            y++
            myfunction(arr, y)
        }
    }
    myfunction(arr, 0)

主要难点是在递归思想的运用上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值