使用lua螺旋打印数组

本文介绍了作者在遇到螺旋打印数组问题时,采用lua语言进行递归实现的过程,分享了这一独特的编程解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在网上看到一个有意思的题目,如何螺旋打印一个数组,比较好奇,就自己先用递归实现了一下。

local randomArray = {
    [1] = {[1] = "a" ,[2] = "b" ,[3] = "c" ,[4] = "d" ,[5] = "e"},
    [2] = {[1] = "f" ,[2] = "g" ,[3] = "k" ,[4] = "o" ,[5] = "p"},
    [3] = {[1] = "z" ,[2] = "x" ,[3] = "c" ,[4] = "v" ,[5] = "b"},
    [4] = {[1] = "g" ,[2] = "h" ,[3] = "j" ,[4] = "k" ,[5] = "l"}
}
for i,v in pairs(randomArray) do 
    if type(v) == "table" then
        for i,v in pairs(v) do
        
        end
    end
end

--边界条件:#tb = 1
function printAroundChars(tb)
    if tb and type(tb) == "table" then 
        if #tb > 0 then
            if #tb == 1 then
                print("only one line")
            else 
                 local w = #tb[1]
                 local h = #tb
                 local leftX = 1
                 local topY= 1
                 local xCursor = 1
                 local yCursor = 1
                 
                 for i = 1,w do 
                    print(tb[1][i])
                 end
                 for i = 2,h do
                    print(tb[i][w])
                 end
                 for i = w-1,1,-1 do
                    print(tb[h][i])
                 end
                 for i = h-1,2,-1 do
                    print(tb[i][1])
                 end
                local nextTable = {}
                 for i = 2,h-1 do
                    for j = 2,w-1 do
                            if not nextTable[i-1] then
                                nextTable[i-1]={}
                            end
                            nextTable[i-1][j-1] =tb[i][j]
                            
                    end
                 end
                printAroundChars(nextTable)
               
            end
        end
    end
    
end
printAroundChars(randomArray)
目前看来,这个还只是实现了,有没有更加高效的算法呢,容我想想 ~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值