首页 / JAVA / 用JAVA解决ACM可重复排列问题
用JAVA解决ACM可重复排列问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用JAVA解决ACM可重复排列问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1223字,纯文字阅读大概需要2分钟。
内容图文
问题:键盘输入一个仅有小写字母组成的字符串,输出以该串中任取M个字母所有排列及排列总数(输入不需要判错)。
问题的难点是:对字符串要先排序,以及有重复字符。
package main;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import static java.util.Collections.*;
public class Main{
public static void main(String[] args){
//int[] arr = new int[]{1, 3, 2, 5, 4, 6, 7, 1, 4, 9};
int[] arr = new int[]{1, 3, 2, 1};
IntStream stream = Arrays.stream(arr);
Stream<Integer> integerStream = stream.boxed();
Integer[] integers = integerStream.toArray(Integer[]::new);
ArrayList<Integer> arr2 = new ArrayList<>(Arrays.asList(integers));
sort(arr2);
do{
for (int i = 0; i<arr2.size(); System.out.print(arr2.get(i++)));
System.out.println();
}while (new Main().next_permutation(arr2, 0, arr2.size()));
}
public boolean next_permutation(ArrayList<Integer> arr, int begin, int end){
if (begin == end || begin + 1 == end) {
return false;
}
for (int i=end-1; i!=begin;){
int j = i--;
if (!(arr.get(i) < arr.get(j))){
continue;
}
int k = end;
while (!(arr.get(i) < arr.get(--k)));
swap(arr, i, k);
reverse(arr.subList(j,end));
return true;
}
reverse(arr.subList(begin, end));
return false;
}
}
来源:唐山SEO
内容总结
以上是互联网集市为您收集整理的用JAVA解决ACM可重复排列问题全部内容,希望文章能够帮你解决用JAVA解决ACM可重复排列问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。