我想要一个算法来生成所有可能的N位数字,其数字按递增顺序排列。
例如:如果N = 3,那么可能的数字是:012,123,234,246,567,259,因为:0。1 2
...
2'; 5'; 9
等
我该怎么做?
我开发了以下算法,但它只生成连续增加数字的数字,如123,234,345,456,567等。因此,错过了大量数字。
private static void generate(int start,int n)
{
if((start+n)>9)
return;
else
{
for(int i=0;i<n;i++)
System.out.print(start+i);
System.out.println();
generate(start+1,n);
}
}
答案 0 :(得分:5)
试着保留原来的想法:
private static void generate(int prefix, int start, int n)
{
if (n == 0)
{
System.out.print(prefix);
System.out.println();
}
else
{
for(int i=start;i<10;i++)
generate(10*prefix+i, i+1, n-1);
}
}
答案 1 :(得分:0)
从更具说明性的角度来看,算法看起来几乎就像数学符号(在Haskell中):
generate = toInt [[a,b,c] | a <- x, b <- x, c <- x, a < b, b < c]
where x = [0..9]
toInt = map (foldl (\n m -> 10*n + m) 0)
其中map (foldl (\n m -> 10*n + m) 0)
只是将数字列表转换为整数
休息是一种自我记录:在服从特定约束的同时取三位数。