--全排列
function fullPermutation(fullArray, startPos,endPos)
local function swap(i1, i2,arr)
local temp = arr[i2];
arr[i2] = arr[i1];
arr[i1] = temp;
end
startPos = startPos or 1
endPos = endPos or #fullArray
if startPos >= endPos then
print(table.concat(fullArray,","))
return
else
for j = startPos,endPos do
--for循环将每个数放到start位置中去
swap(startPos,j,fullArray);
--剩下的数继续递归,下一个位置,一维问题
fullPermutation(fullArray,startPos + 1,endPos);
--回溯
swap(startPos,j,fullArray);
end
end
end
--组合
function combination(arr,nCount,resultArr,head)
head = head or 1
resultArr = resultArr or {}
if (#resultArr == nCount ) then
--组合选的结果出来
print(table.concat(resultArr,","))
else
for i = head,#arr do
if(#resultArr < nCount ) then
table.insert(resultArr,arr[i])
combination(arr,nCount,resultArr,i + 1)
--回溯还原
table.remove(resultArr)
end
end
end
end
--所有组合
function allCombination(arr)
for i = 1,#arr do
combination(arr,i)
end
end
--所有排列
function allPermutation(arr)
function combination(arr,nCount,resultArr,head)
head = head or 1
resultArr = resultArr or {}
if (#resultArr == nCount ) then
--组合选的结果出来
--print(table.concat(resultArr,","))
--组合结果
fullPermutation(resultArr)
else
for i = head,#arr do
if(#resultArr < nCount ) then
table.insert(resultArr,arr[i])
combination(arr,nCount,resultArr,i + 1)
--回溯还原
table.remove(resultArr)
end
end
end
end
for i = 1,#arr do
combination(arr,i)
end
end
--注意排列中的数字不能重复
--测试代码,在luaEditor中测试通过
local Data = {4,5,6}
--fullPermutation(Data)
allPermutation(Data)
--allCombination(Data)
--combination(Data,2)
排列组合Lua实现
最新推荐文章于 2020-08-11 18:20:30 发布