2015-04-06 128 views
-1

我当时在python里乱搞,我发现这个库叫做itertools。这对于您在比赛中遇到的挑战非常有用。然而,我只能选择接受python的三项比赛中的一项。它们都支持主要的java和其他各种c风格的语言。这个python代码的Java等价物

反正我在python中编写了这段代码,并且想把它翻译成java。

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

这将打印出单词长度的所有排列。

实例:喜--->喜,1H

FOO ---> FOO,FOO,OFO,OOF,OFO,OOF

(是有重复忽略它们应答时)

现在我意识到了这一点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分代码,但是,我不能因为这个限制。 有没有人知道一个类似于python的itertools的java库?

+1

即使存在,为什么竞争允许您引用任意库? – Phylogenesis

+2

当然,使用大量不同的图书馆将会超出大多数竞争规则的范围?无论如何,[itertools](https://docs.python.org/2/library/itertools.html)是python标准库的一部分。我不知道一个Java标准库的等价物。 – will

+0

在参加的比赛中,使用标准库是合法的。例如,我使用'StringBuilder'来检查竞争中的回文。 – JGerulskis

回答

0

番石榴的Collections2.permutations可能会做这项工作,但正如很多其他人所说,第三方图书馆通常不是比赛编程的公平游戏。 (这里没有内置到Java的内容。)

+0

不幸的是,第三方库是不合法的,但我会接受这个答案,希望你没有错。 – JGerulskis