剑指offer.45.最小组合数

最小组合数

前言

对于排序来说,我们是针对目标来排序,如本题针对的是组合的数是否是最小,所以排序的时候就根据两两之间的组合来看谁小。这都是针对要解决问题本身所产出不一样的排序规则。

一、新的排序规则

可以使用自定义的排序,可以用库函数。

1、库函数

import java.util.Arrays;

public class MinNumber45 {
    public String minNumber(int[] nums) {
        //转化为字符串更方便比较
        String[] strs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strs[i] = String.valueOf(nums[i]);
        }
        //库函数排序
        Arrays.sort(strs,((o1, o2) -> (o1+o2).compareTo(o2+o1)));
        //将排好的数组通过库函数连接起来。join的底层也是stringbuilder.
        return String.join("",strs);
    }
}

2、希尔排序

//希尔排序
    public String minNumber2(int[] nums) {
        //比较最高位数
        String[] strs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strs[i] = String.valueOf(nums[i]);
        }
        for (int d = nums.length / 2; d > 0; d = d / 2) {
            for (int i = d; i < nums.length; i++) {
                if ((strs[i] + strs[i - d]).compareTo(strs[i - d] + strs[i]) < 0) {
                    String temp = strs[i];
                    int j = i - d;
                    for (; j >= 0 && (strs[j] + temp).compareTo(temp + strs[j]) > 0; j = j - d) {
                        strs[j + d] = strs[j];
                    }
                    strs[j + d] = temp;
                }
            }
        }
        return String.join("", strs);
    }

总结

排序要根据目标是什么来排序。一般的是简单的升序和降序。

上一篇:搭建React项目(一):在网页中使用


下一篇:docker部署vue前端