首页 > 解决方案 > 如何对排列进行排序

问题描述

我已经编译了我的代码并且它可以正常工作,我目前正在尝试添加一个排序方法来获得我的排列的降序排序功能。

我尝试了许多数组排序函数。我不知道我需要更改什么来配置排序方法。

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);

}
} 

我的程序运行良好,我得到了结果。我只需要以降序格式对结果进行排序。我在完成此功能时遇到问题。

标签: java

解决方案


我认为您有两种方法可以解决您的问题。

  1. 您不是一次打印出您的排列,而是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);

    }
}
  1. 第二种方法是按顺序创建排列。首先,您对数字进行排序。然后根据Nayuki 计划进行 pe 。

推荐阅读