Java 相当于此 python 代码
Java equivalent for this python code
我在 python 闲逛,发现这个库叫 itertools
。这对于您在比赛中遇到的挑战非常有用。然而,我参加的三场比赛中只有一场接受 python。它们都主要支持 java 和其他各种 c 风格的语言。
反正我在 python 中写了这段代码,想把它翻译成 java。
import itertools
array = [''.join(x) for x in itertools.permutations(input("Enter a word: "))]
print(",".join(array).replace(",", "\n"))
这将打印出一个单词的所有排列,即单词的长度。
示例: hi ---> hi, ih
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 行代码来反对这个,但是,由于限制,我不能。 有人知道 java 中的图书馆与 python 的 itertools
相似吗?
Guava 的 Collections2.permutations
可能会完成这项工作,但正如许多其他人所说,第三方库通常不适合竞赛编程。 (Java 中没有此功能。)
我在 python 闲逛,发现这个库叫 itertools
。这对于您在比赛中遇到的挑战非常有用。然而,我参加的三场比赛中只有一场接受 python。它们都主要支持 java 和其他各种 c 风格的语言。
反正我在 python 中写了这段代码,想把它翻译成 java。
import itertools
array = [''.join(x) for x in itertools.permutations(input("Enter a word: "))]
print(",".join(array).replace(",", "\n"))
这将打印出一个单词的所有排列,即单词的长度。
示例: hi ---> hi, ih
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 行代码来反对这个,但是,由于限制,我不能。 有人知道 java 中的图书馆与 python 的 itertools
相似吗?
Guava 的 Collections2.permutations
可能会完成这项工作,但正如许多其他人所说,第三方库通常不适合竞赛编程。 (Java 中没有此功能。)