从1--m中选n个数字的排列组合的简单实现,速度还可以:
Sub getall(ByVal m As Byte, ByVal n As Byte, Optional types As Byte = 0)'types=0为排列 types=1 为组合
Dim num As Long, i As Integer, k As Integer, a(), s() As String
ReDim a(1 To n)
k = 1
Do
a(k) = a(k) + 1
If a(k) > m Then
k = k - 1
Else
For i = 1 To k - 1
If a(k) = a(i) Then Exit For
Next
If i = k Then
If k = n Then
num = num + 1
ReDim Preserve s(1 To num)
s(num) = Join(a, ",")
End If
If k < n Then k = k + 1: a(k) = a(k - 1) * types
End If
End If
Loop Until k = 0
Debug.Print Join(s, vbTab)
End Sub
Sub getit()
getall 8, 3, 1 '组合
Debug.Print
getall 8, 3 '排列
End Sub
返回:
1,2,3 1,2,4 1,2,5 1,2,6 1,2,7 1,2,8 1,3,4 1,3,5 1,3,6 1,3,7 1,3,8 1,4,5 1,4,6 1,4,7 1,4,8 1,5,6 1,5,7 1,5,8 1,6,7 1,6,8 1,7,8 2,3,4 2,3,5 2,3,6 2,3,7 2,3,8 2,4,5 2,4,6 2,4,7 2,4,8 2,5,6 2,5,7 2,5,8 2,6,7 2,6,8 2,7,8 3,4,5 3,4,6 3,4,7 3,4,8 3,5,6 3,5,7 3,5,8 3,6,7 3,6,8 3,7,8 4,5,6 4,5,7 4,5,8 4,6,7 4,6,8 4,7,8 5,6,7 5,6,8 5,7,8 6,7,8
1,2,3 1,2,4 1,2,5 1,2,6 1,2,7 1,2,8 1,3,2 1,3,4 1,3,5 1,3,6 1,3,7 1,3,8 1,4,2 1,4,3 1,4,5 1,4,6 1,4,7 1,4,8 1,5,2 1,5,3 1,5,4 1,5,6 1,5,7 1,5,8 1,6,2 1,6,3 1,6,4 1,6,5 1,6,7 1,6,8 1,7,2 1,7,3 1,7,4 1,7,5 1,7,6 1,7,8 1,8,2 1,8,3 1,8,4 1,8,5 1,8,6 1,8,7 2,1,3 2,1,4 2,1,5 2,1,6 2,1,7 2,1,8 2,3,1 2,3,4 2,3,5 2,3,6 2,3,7 2,3,8 2,4,1 2,4,3 2,4,5 2,4,6 2,4,7 2,4,8 2,5,1 2,5,3 2,5,4 2,5,6 2,5,7 2,5,8 2,6,1 2,6,3 2,6,4 2,6,5 2,6,7 2,6,8 2,7,1 2,7,3 2,7,4 2,7,5 2,7,6 2,7,8 2,8,1 2,8,3 2,8,4 2,8,5 2,8,6 2,8,7 3,1,2 3,1,4 3,1,5 3,1,6 3,1,7 3,1,8 3,2,1 3,2,4 3,2,5 3,2,6 3,2,7 3,2,8 3,4,1 3,4,2 3,4,5 3,4,6 3,4,7 3,4,8 3,5,1 3,5,2 3,5,4 3,5,6 3,5,7 3,5,8 3,6,1 3,6,2 3,6,4 3,6,5 3,6,7 3,6,8 3,7,1 3,7,2 3,7,4 3,7,5 3,7,6 3,7,8 3,8,1 3,8,2 3,8,4 3,8,5 3,8,6 3,8,7 4,1,2 4,1,3
4,1,5 4,1,6 4,1,7 4,1,8 4,2,1 4,2,3 4,2,5 4,2,6 4,2,7 4,2,8 4,3,1 4,3,2 4,3,5 4,3,6 4,3,7 4,3,8 4,5,1 4,5,2 4,5,3 4,5,6 4,5,7 4,5,8 4,6,1 4,6,2 4,6,3 4,6,5 4,6,7 4,6,8 4,7,1 4,7,2 4,7,3 4,7,5 4,7,6 4,7,8 4,8,1 4,8,2 4,8,3 4,8,5 4,8,6 4,8,7 5,1,2 5,1,3 5,1,4 5,1,6 5,1,7 5,1,8 5,2,1 5,2,3 5,2,4 5,2,6 5,2,7 5,2,8 5,3,1 5,3,2 5,3,4 5,3,6 5,3,7 5,3,8 5,4,1 5,4,2 5,4,3 5,4,6 5,4,7 5,4,8 5,6,1 5,6,2 5,6,3 5,6,4 5,6,7 5,6,8 5,7,1 5,7,2 5,7,3 5,7,4 5,7,6 5,7,8 5,8,1 5,8,2 5,8,3 5,8,4 5,8,6 5,8,7 6,1,2 6,1,3 6,1,4 6,1,5 6,1,7 6,1,8 6,2,1 6,2,3 6,2,4 6,2,5 6,2,7 6,2,8 6,3,1 6,3,2 6,3,4 6,3,5 6,3,7 6,3,8 6,4,1 6,4,2 6,4,3 6,4,5 6,4,7 6,4,8 6,5,1 6,5,2 6,5,3 6,5,4 6,5,7 6,5,8 6,7,1 6,7,2 6,7,3 6,7,4 6,7,5 6,7,8 6,8,1 6,8,2 6,8,3 6,8,4 6,8,5 6,8,7 7,1,2 7,1,3 7,1,4 7,1,5
7,1,6 7,1,8 7,2,1 7,2,3 7,2,4 7,2,5 7,2,6 7,2,8 7,3,1 7,3,2 7,3,4 7,3,5 7,3,6 7,3,8 7,4,1 7,4,2 7,4,3 7,4,5 7,4,6 7,4,8 7,5,1 7,5,2 7,5,3 7,5,4 7,5,6 7,5,8 7,6,1 7,6,2 7,6,3 7,6,4 7,6,5 7,6,8 7,8,1 7,8,2 7,8,3 7,8,4 7,8,5 7,8,6 8,1,2 8,1,3 8,1,4 8,1,5 8,1,6 8,1,7 8,2,1 8,2,3 8,2,4 8,2,5 8,2,6 8,2,7 8,3,1 8,3,2 8,3,4 8,3,5 8,3,6 8,3,7 8,4,1 8,4,2 8,4,3 8,4,5 8,4,6 8,4,7 8,5,1 8,5,2 8,5,3 8,5,4 8,5,6 8,5,7 8,6,1 8,6,2 8,6,3 8,6,4 8,6,5 8,6,7 8,7,1 8,7,2 8,7,3 8,7,4 8,7,5 8,7,6
分享到:
相关推荐
有重复元素下的排列组合 数字组合 找出集和中和等于特殊值的子集和 含有相同元素的集和,找和为特殊值的子集和 集和中寻找和为特殊值的子集和 两个有序数组的中位数 [4. 寻找两个有序数组的中位数]
1.7 下一个排列 1.8 第n个全排列 1.9 验证数独的正确性 1.10 容纳雨水的量 1.11 旋转图像 1.12 数字加1 1.13 爬楼梯 1.14 格雷码 1.15 设置矩阵的行列为0 1.16 加油站问题 1.17 分糖果 1.18 只出现一次的数 2. ...
数字老鼠leetcode Python 5. 最长回文子串 (Reference: https://leetcode.com/problems/longest-palindromic-substring/solution/) 解决方案 日期 最长公共子串 6/24 蛮力 6/24 动态规划 8/14 围绕中心展开 8/12 92....
给定随机罗马数字字符串计算代表整数。哈希表 找出字符串数组中最长的公共前缀。水平扫描 垂直扫描 分治法 二分查找 括号字符串检查是否配对。栈 实现substr。暴力法,kmp 查找元素在数组中的位置,如果不存在则返回...
回溯(排列 & 组合 & 子集...等) 数学 和更多... 来自的问题 玻璃门 采访 ... 尖端 检查这个先发帖。 每当您使用一些新技术/算法解决新问题时,请尝试连续解决至少 2 个类似的问题。 这样,您对新技术/算法的理解会...
排列、组合、分割、子集:四大类问题,常用回溯、DFS解决 图的搜索:DFS、BFS、并查集、Flood 并查集(TODO) 二分查找: g 函数,利用边界 K th 问题 旋转数组 双指针: 左右指针:数组(或字符串)问题,二分查找...
回溯 17.电话号码的字母组合 22.生成括号 39.组合和 40.组合和II 46.排列 78.子集 79.词搜索 二分查找 33.在旋转排序数组中搜索 34.在有序数组中查找元素的首尾位置 35.搜索插入位置 动态规划 10.正则表达式匹配 32....
电话号码的字母组合 #17 四数之和 #18 删除链表的倒数第N个节点 #19 有效的括号 #20 合并两个有序链表 #21 *括号生成 #22 合并K个排序链表 #23 两两交换链表中的节点 #24 K 个一组翻转链表 #25 删除排序数组中的重复...
100 <br>0158 如何将二进制数转换为十六进制数 100 <br>0159 如何实现0~9之间随机整数 101 <br>0160 如何实现0~1之间随机数 101 <br>0161 如何返回数字的绝对值 101 <br>5.2 控件数据处理...
回溯 动态规划 各种各样的 附录 问题详情 数组 二分查找 - , 找到最大滑动窗口 - 搜索旋转数组 - 找到最小的公数 - 旋转阵列 - 查找低/高指数 - 向左移动零 - 找到最大单笔卖出利润 - 实施快速排序 - 合并重叠区间 -...
36、 (组合问题)求出从自然数1,2,…,n中任取r个数的所有组合。 37、 传教士与野人渡河问题。有M个传教士和M个野人准备渡河,船一次最多载2人,任何时刻野人数不能多于传教士数,但允许全部为野人。编写算法给出...
多个字段组合时,只排除组合重复的。 DISTINCT必须使用列名,不能使用计算或者表达式。 所有的聚合函数都可以使用。如果指定列名,则DISTINCT只能用于COUNT(列名),DISTINCT不能用于COUNT(*)。 如:Select ...
集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成的总长度不超过32个字符的字符串,且不区分大小写。 注意:该命名规则同样适用...