
--全排列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 endend--组合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) endend --所有排列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) endend--注意排列中的数字不能重复--测试代码,在luaEditor中测试通过local Data = {4,5,6}--fullPermutation(Data)allPermutation(Data)--allCombination(Data)--combination(Data,2)