/// <summary>
/// 获取允许重复的排列组合
/// </summary>
/// <param name="s"> 源字符串</param>
/// <param name="cnt"> 组合位数</param>
/// <returns> 生成结果</returns>
static IEnumerable<string > GetVariations(string s)
{
int[] indexes = new int[s.Length];
StringBuilder sb = new StringBuilder ();
while (IncrementIndexes(indexes, s.Length))
{
sb.Clear();
for ( int i = 0; i < indexes.Length; i++)
{
if (indexes[i] != 0)
{
sb.Append(s[indexes[i] - 1]);
}
}
yield return sb.ToString();
}
}
static bool IncrementIndexes( int[] indexes, int limit)
{
for ( int i = 0; i < indexes.Length; i++)
{
indexes[i]++;
if (indexes[i] > limit)
{
indexes[i] = 1;
}
else
{
return true;
}
}
return false;
}
排列 和 组合的区别
排列是有顺序的,如(a,b,c)和(b,c,a)是不同的,虽然同样是三个字母,但顺序不同。
组合是没有顺序的,如(a,b,c)和(b,c,a)是相同的,只要是同样的字母组合,顺序无所谓。
本文为“技术点滴”的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。