给出一个数字,例如n = 201
S = { 2, 0, 1, 20, 201, 21}
我知道这不是一个罕见的问题,但是我还没有找到确切的关键字,包括“排列”,“组合”,“ [标题]”等
任何关键字/来源也受到赞赏,因此我可以自己研究!
答案 0 :(得分:0)
这是一个递归Java解决方案,它使用数学运算来生成所有删除数字的排列:
static void permuteDeletions(List<Integer> perms, int n)
{
if(n >= 10)
{
permuteDeletions(perms, n/10);
for(int p, i=perms.size()-1; i>=0; i--)
if((p = perms.get(i)) > 0) perms.add(10*p + n%10);
}
perms.add(n%10);
}
测试:
public static void main(String[] args)
{
List<Integer> perms = new ArrayList<>();
permuteDeletions(perms, 201);
Collections.sort(perms);
System.out.println(perms);
}
输出:
[0, 1, 2, 20, 21, 201]