问题
排列s有n个元素[x0,x1,…,xn−1],每个元素可以选取[1,2,…,m]这m个值。
例如n=3,m=2的排列s有以下情况:
[1,1,1][2,1,1][1,2,1][1,1,2][2,2,1][2,1,2][1,2,2][2,2,2] 给定n,m的值,用Brute Force求排列s的所有情况。
解法
根据乘法原理可以看出,排列s生成每种情况都可以看作一件n步才能完成的工作,其中每一步都是每个元素的选择过程。第i步的完成有m个方法,那么共有nm种方法可以完成该工作。
通过遍历求出所有情况,例如对于排列s=[x0,x1,x2,x3],每个元素的范围是[1,5]。需要对4个元素枚举所有5种情况,即可求出排列s的所有可能。对n个元素,每个有m个值的排列s,遍历所有情况的时间复杂度O(nm)。
源码
BruteForce.h
BruteForce.cpp
测试
BruteForceTest.cpp