通过删除给定数字的位数来生成所有数字

时间:2018-09-19 03:05:38

标签: algorithm numbers combinations permutation

给出一个数字,例如n = 201

S = { 2, 0, 1, 20, 201, 21}

我知道这不是一个罕见的问题,但是我还没有找到确切的关键字,包括“排列”,“组合”,“ [标题]”等

任何关键字/来源也受到赞赏,因此我可以自己研究!

1 个答案:

答案 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]