lua实现全排列和组合排列
2016-03-21 10:10
1006 查看
--组合排列 function sub(head,index,r,k,a) for i=head,#a+index-k do if(index<k) then r[index ] = a[i]; sub(i + 1, index + 1, r, k,a); elseif (index == k) then r[index ] = a[i]; --local t="" --t = table.concat(r) --TracePrint(t,#t) //全排列和组合排列一起使用 fullPermutation(r) end end end function fullsub(t,start,end1,r) r = {} start =start or 1 end1 = end1 or #t for tmpi=start, end1 do sub(1,1,r,tmpi,t) end end --以下为全排列 function IsSwap (fullArray, start,end1) --这个还未理解 for tmpi=start,end1-1 do if fullArray[tmpi] == fullArray[end1] then return false end end return true end function fullPermutation(fullArray, start,end1) assert(type(fullArray) == "table", "参数类型错误") start = start or 1 end1 =end1 or #fullArray local ret ="" --出口 if start >= end1 then for tmpii=1,#fullArray do ret = ret .. fullArray[tmpii] end TracePrint(ret) return end --else for tmpi=start,end1 do -- 交换得到新的排列 --去除重复数字 if IsSwap (fullArray, start,tmpi) then fullArray[tmpi] ,fullArray[start]=fullArray[start],fullArray[tmpi] --swap(fullArray,start,tmpi) --递归 fullPermutation(fullArray, start+1,end1) --还原至最初的排列 fullArray[tmpi] ,fullArray[start]=fullArray[start],fullArray[tmpi] --end end end --end end --测试代码 a={4,5,6} fullsub(a)
相关文章推荐
- lua2c
- lua bytecode 编译
- lintcode-medium-Evaluate Reverse Polish Notation
- (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境
- lua 调用.so 和 require 使用
- Wireshark使用drcom_2011.lua插件协助分析drcom协议
- Lua 语言中的模式匹配
- CsToLua
- c# lua 简单交互
- Leetcode 150. Evaluate Reverse Polish Notation
- C++混合编程之idlcpp教程Lua篇(2)
- .net和plsql和lua的关联
- lua和html和aspx的关联
- lua和adb和mangodb的关联
- lua和ssh和opencv的关联
- luamysql 安装
- Lua学习笔记--面向对象
- luajit 安装cjson
- Lua和C++交互详细总结
- jre和linq和lua的关联