Генерация всех номеров путем удаления цифр данного номера - PullRequest
0 голосов
/ 19 сентября 2018

Учитывая число, скажем, n = 201

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

Я знаю, что это не редкий вопрос, но я не нашел точных ключевых слов, включая комбинации "перестановок" """ [title] "etc

Любые ключевые слова / источники также приветствуются, поэтому я могу исследовать их самостоятельно!

1 Ответ

0 голосов
/ 20 сентября 2018

Вот рекурсивное 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]
...