java - 如何对排列进行排序
问题描述
我已经编译了我的代码并且它可以正常工作,我目前正在尝试添加一个排序方法来获得我的排列的降序排序功能。
我尝试了许多数组排序函数。我不知道我需要更改什么来配置排序方法。
import java.util.*;
public class Permutation {
public static void main(String[] args)
{
String str;
Scanner in = new Scanner(System.in);
System.out.println("Enter details");
str = in.nextLine();
System.out.println("You entered " + str);
int n = str.length();
Permutation permutation = new Permutation();
permutation.permute(str, 0, n - 1);
}
/**
* permutation function
* @param str string to calculate permutation for
* @param l starting index
* @param r end index
*/
private void permute(String str, int l, int r)
{
if (l == r)
System.out.println(str);
else {
for (int i = l; i <= r; i++) {
str = swap(str, l, i);
permute(str, l + 1, r);
//str = swap(str, l, i);
}
}
}
/**
* Swap Characters at position
* @param a string value
* @param i position 1
* @param j position 2
* @return swapped string
*/
public String swap(String a, int i, int j)
{
char temp;
char charArray[] = a.toCharArray();
temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
return String.valueOf(charArray);
}
}
我的程序运行良好,我得到了结果。我只需要以降序格式对结果进行排序。我在完成此功能时遇到问题。
解决方案
我认为您有两种方法可以解决您的问题。
- 您不是一次打印出您的排列,而是
String[] permutatedStrings
在开头创建一个数组permutate()
并将排列后的字符串添加到您现在打印它们的位置。在方法结束时,您执行Arrays.sort(permutatedStrings, Comparator<String>.comparingInt((String str) -> Integer.parseInt(str) * -1);
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Permutation {
public static void main(String[] args)
{
String str;
Scanner in = new Scanner(System.in);
System.out.println("Enter details");
str = in.nextLine();
in.close();
System.out.println("You entered " + str);
str = str.replaceAll("\\D+", "");
// Eliminating excess character, leaving integers
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println("No Valid Numbers");
}
// Error exception is thrown where there is no integer present
int n = str.length();
Permutation permutation = new Permutation();
ArrayList<String> permutatedStrings = new ArrayList<>();
ArrayList<String> resultList = permutation.permute(permutatedStrings, str, 0, n - 1);
Object[] result = resultList.toArray();
Arrays.sort(result, Comparator.comparingInt((Object string) -> Integer.parseInt((String) string) * -1));
for (Object object : result) {
System.out.println((String) object);
}
}
/**
* permutation function
*
* @param str string to calculate permutation for
* @param l starting index
* @param r end index
*/
private ArrayList<String> permute(ArrayList<String> permutatedStrings, String str, int l, int r) {
if (l == r) {
permutatedStrings.add(str);
} else {
for (int i = l; i <= r; i++) {
str = swap(str, l, i);
permute(permutatedStrings, str, l + 1, r);
// str = swap(str, l, i);
}
}
return permutatedStrings;
}
/**
* Swap Characters at position
*
* @param a string value
* @param i position 1
* @param j position 2
* @return swapped string
*/
public String swap(String a, int i, int j) {
char temp;
char charArray[] = a.toCharArray();
temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
return String.valueOf(charArray);
}
}
- 第二种方法是按顺序创建排列。首先,您对数字进行排序。然后根据Nayuki 计划进行 pe 。
推荐阅读
- ansible - 遍历ansible中的列表列表
- javascript - 只选择一项
- asp.net-core - asp.net 5 / 核心身份自定义问题 - 没有隐式引用转换错误
- spring - spring boot 是否支持一系列规范作为入口?
- mongodb - 为什么带有 $pull 的 updateOne() 会出错?
- python - 类权重 = 平衡不适用于 SVM
- google-sheets - 我可以在 google 中创建一个使用公式链接到另一个选项卡的单元格超链接吗?
- python - 根据不同列中的匹配行将 3 列值从 DF2 复制到 DF1
- python - 为什么 Pytube 不包含 720p 以上质量的音频?
- python - 如何在输入状态更改时更改按钮颜色+更改输出状态