2015-04-06 2 views
-1

Я работал в python, и я нашел эту библиотеку под названием itertools. Это очень полезно для проблем, с которыми вы столкнулись на соревнованиях. Однако только одно из трех соревнований, которое я собираюсь принять на python. Все они поддерживают главным образом java и другие языки c-стиля c.Java-эквивалент для этого кода на Python

Anyways Я написал этот код в python и хочу перевести его в java.

import itertools 
array = [''.join(x) for x in itertools.permutations(input("Enter a word: "))] 
print(",".join(array).replace(",", "\n")) 

Это напечатает все перестановки слова, которые являются длиной слова.

Примеры: привет ---> привет, Ih

Foo ---> Foo, Foo, OFO, уф, OFO, уф

(Да, есть дублируют игнорировать их при ответе)

Теперь я в курсе этого кода Java, который похож на то, что я сделал (не беспокоить рассматривать его. Просто знаю, что это делает ту же задачу)

public class Permutations { 
    // print N! permutation of the characters of the string s (in order) 
    public static void perm1(String s) { perm1("", s); } 
    private static void perm1(String prefix, String s) { 
     int N = s.length(); 
     if (N == 0) System.out.println(prefix); 
     else { 
      for (int i = 0; i < N; i++) 
       perm1(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, N)); 
     } 

    } 

    // print N! permutation of the elements of array a (not in order) 
    public static void perm2(String s) { 
     int N = s.length(); 
     char[] a = new char[N]; 
     for (int i = 0; i < N; i++) 
      a[i] = s.charAt(i); 
     perm2(a, N); 
    } 

    private static void perm2(char[] a, int n) { 
     if (n == 1) { 
      System.out.println(a); 
      return; 
     } 
     for (int i = 0; i < n; i++) { 
      swap(a, i, n-1); 
      perm2(a, n-1); 
      swap(a, i, n-1); 
     } 
    } 

    // swap the characters at indices i and j 
    private static void swap(char[] a, int i, int j) { 
     char c; 
     c = a[i]; a[i] = a[j]; a[j] = c; 
    } 



    public static void main(String[] args) { 
     int N = Integer.parseInt(args[0]); 
     String alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
     String elements = alphabet.substring(0, N); 
     perm1(elements); 
     System.out.println(); 
     perm2(elements); 
    } 
} 

Теперь, когда я закончил соревнование, я бы предпочел использовать мой 3-уровневый код, который был против этого, но я не могу из-за ограничений. Кто-нибудь знает библиотеку в java, которая похожа на python's itertools?

+1

Даже если есть, почему конкуренция позволит вам ссылаться на произвольные библиотеки? – Phylogenesis

+2

Несомненно, использование множества разных библиотек выходит за рамки большинства правил конкуренции? Во всяком случае, [itertools] (https://docs.python.org/2/library/itertools.html) является частью стандартной библиотеки python. Я не знаю эквивалент стандартной библиотеки Java. – will

+0

В конкурсах, в которых я участвую, использование стандартной библиотеки является законным. Например, я использовал такие вещи, как 'StringBuilder', чтобы проверять наличие палиндромов в конкурсе. – JGerulskis

ответ

0

Guava Collections2.permutations может выполнить эту работу, но, как и многие другие люди, сторонние библиотеки обычно не являются честной игрой для программирования соревнований. (Нет ничего для этого встроенного в Java.)

+0

К сожалению, да, сторонние библиотеки не являются законными, но я буду принимать это как ответ, надеясь, что вы правы, что нет эквивалента. – JGerulskis