今天在网上看到一个有意思的题目,如何螺旋打印一个数组,比较好奇,就自己先用递归实现了一下。
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)
目前看来,这个还只是实现了,有没有更加高效的算法呢,容我想想 ~~~~