字典树排序(思路分析)

字典树排序是全排列的一种典型例题

:将某一字符串的组成字母任意变换位置,变化的种类有多少种(按字典序输出)?

(注意:可能一个字母出现不止一次)


思路:

①求 变化的种类,可以用全排列的方法;

 1.考虑用递归:模仿中序遍历、前序遍历代码格式;则想到要实现一个排列函数,在函数里调用自己。

         2.排列函数:

                2.1:首先想到要在循环中不断交换两个位置的值,还要确保能交换回来,并且在交换期间要遍历完所有情况:

                          于是将递归调用的函数写在两个swap中;

                2.2:交换的起点要不断推移,因此不能把交换起点写死,而交换的另一个点应该是在起点(包含起点,因为本身不换也是一种)到终点之间,因此要把起点最为函数形参随递归调用而向前推移。     

                2.3:递归要有出口:如果交换的起点已经在最后一点,说明已经遍历完成,该反向生成各个字符串了。

                2.4:此地鬼函数在主函数中被调用,交换起点应该设置为0,并用一个list作为形参以便进行字符串的添加。        

②要按字典序输出,可以全排列完后最后进行整体排序;

③组成的字母可能会重复,考虑用list.contains(str1)判断是否包含,因此用ArrayList<String>来存储每个字符串。

代码:

public void Permutation(char[] arr, int i, ArrayList list) {
        if(i == arr.length - 1) {
            String str= String.valueOf(arr);
            if (!list.contains(str))
                list.add(str);
        } else {
            for(int j = i; j < arr.length; ++j) {
                swap(arr, i, j);
                PermutationHelper(arr, i + 1, list);
                swap(arr, i, j);
            }
        }
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 中的 Map 是一种存储键值对的数据结构。要对 Map 中的值进行排序,可以使用 Java 中的 Comparator 接口。 例如,假设有一个 Map 变量 `myMap`,要按照值从大到小的顺序对它进行排序,可以使用以下代码: ``` List<Map.Entry<String, Integer>> list = new ArrayList<>(myMap.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o2.getValue().compareTo(o1.getValue()); } }); ``` 这段代码首先将 Map 的条目(即键值对)转存到一个 List 中,然后使用 `Collections.sort` 对这个 List 进行排序。在这里,我们使用了一个 Comparator 来定义排序规则,比较两个条目的值(`o1.getValue()` 和 `o2.getValue()`)。 排序后的结果可以使用以下代码来遍历: ``` for (Map.Entry<String, Integer> entry : list) { System.out.println(entry.getKey() + ": " + entry.getValue()); } ``` 希望这些信息能帮到你。 ### 回答2: 在Java中,可以使用TreeMap对Map的值进行排序。TreeMap是一个基于红黑树的有序映射,它会将键值对按照键的自然顺序进行排序。 首先,你需要创建一个TreeMap对象,并将原来的Map对象中的键值对依次放入到TreeMap中。代码如下: ```java // 创建一个TreeMap对象,用于排序 TreeMap<String, Integer> sortedMap = new TreeMap<>(); // 将原来的Map对象中的键值对放入到TreeMap中 sortedMap.putAll(yourMap); ``` 现在,你可以根据键或者值对TreeMap进行排序。如果你想按照键的升序排序,可以直接使用sortedMap。如果你想按照值的升序排序,可以使用Collections工具类的sortByValue方法。示例如下: 按照键的升序排序: ```java for (Map.Entry<String, Integer> entry : sortedMap.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } ``` 按照值的升序排序: ```java // 创建一个List对象,用于存放Map的键值对 List<Map.Entry<String, Integer>> sortedList = new ArrayList<>(sortedMap.entrySet()); // 使用Collections工具类的sortByValue方法进行排序 Collections.sort(sortedList, Map.Entry.comparingByValue()); // 遍历排序后的List,打印值排序后的键值对 for (Map.Entry<String, Integer> entry : sortedList) { System.out.println(entry.getKey() + ": " + entry.getValue()); } ``` 上述代码可以按照值的升序排序,并打印排序后的键值对。如果你想按照值的降序排序,可以在sortByValue方法后面加上Collections.reverseOrder()。例如: ```java Collections.sort(sortedList, Map.Entry.comparingByValue(Collections.reverseOrder())); ``` 这样就可以按照值的降序排序,并打印排序后的键值对了。 ### 回答3: 在Java中,可以通过使用`java.util.TreeMap`或`java.util.LinkedHashMap`来对`Map`中的值进行排序。 使用`TreeMap`可以将Map按照键的自然顺序进行排序。以下是一个示例: ```java import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String[] args) { Map<String, Integer> map = new TreeMap<>(); map.put("a", 3); map.put("c", 1); map.put("b", 2); System.out.println("排序前的Map:" + map); Map<String, Integer> sortedMap = new TreeMap<>(map); System.out.println("排序后的Map:" + sortedMap); } } ``` 输出结果为: ``` 排序前的Map:{a=3, b=2, c=1} 排序后的Map:{a=3, b=2, c=1} ``` 除了`TreeMap`外,还可以使用`LinkedHashMap`来排序Map中的值。不同的是,`LinkedHashMap`会按照元素插入的顺序进行排序。以下是一个示例: ```java import java.util.LinkedHashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, Integer> map = new LinkedHashMap<>(); map.put("a", 3); map.put("c", 1); map.put("b", 2); System.out.println("排序前的Map:" + map); Map<String, Integer> sortedMap = new LinkedHashMap<>(); map.entrySet().stream() .sorted(Map.Entry.comparingByValue()) .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue())); System.out.println("排序后的Map:" + sortedMap); } } ``` 输出结果为: ``` 排序前的Map:{a=3, c=1, b=2} 排序后的Map:{c=1, b=2, a=3} ``` 以上就是对`java.util.Map`中的值进行排序的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值