45题目描述:

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

解析:

大体的思路类似贪心 让高位取最小值,那么这个最小值的求法就有讲究了,要按位挨个判断数字的大小,数字的话实现起来蛮麻烦的,但是转成字符串的话比较大小就方便了,字符串就是按位比较大小的 比如"12"和“34”,ASCII值1<3,所以12更小,但是对于位数不同的,如"3"和“30”,没法比较,所以把两者合并成一个字符串再比较大小,比较"303"和"330",按位比较显然303更小。

Java:

public String minNumber(int[] nums) {
        String[] str = new String[nums.length];
        for(int i = 0; i < nums.length; i++) {
            str[i] = String.valueOf(nums[i]);
        }
        Arrays.sort(str, (x, y) -> (x + y).compareTo(y + x));
        StringBuilder res = new StringBuilder();
        for(String s : str) {
            res.append(s);
        }
        return res.toString();
    }

JavaScript:

var minNumber = function(nums) {
    nums.sort((a, b) => {
        const s1 = a + "" + b;
        const s2 = b + "" + a;
        if (s1 < s2) return -1;
        if (s1 > s2) return 1;
        return 0;
    });
    return nums.join("");
};

61题目描述:

从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。

解析:

这个数组中0可以当任何数用,所以当牌不连续的时候,它就可以替补一下,进而达到顺的要求。举个例子 0 0 1 2 4 5 6,这个数组中,0有两个,所以我们有俩万能替补,接着我们可以发现2-4之间不连续,缺个3,这样我们就可以把一个0放到哪里当三,0 1 2 0 4 5 6,0代替了3的位置,达到了连续的要求,那啥时候就不行了呢,当你万能替补0的个数,没有间隙大的时候,比如你只有一个0,但是其中数组中有俩连续的数之间差特别大,达到0的个数不够,比如1-7,中间差了5个数,你就一个0显然不够,所以这就不是顺儿。

Java:

public boolean isStraight(int[] nums) {
        Arrays.sort(nums);
        int count = 0;
        for(int i = 0; i < 4; i++) {
            if(nums[i] == 0) {
                count++;
            } else {
                if(nums[i + 1] - nums[i] > count + 1 || nums[i + 1] == nums[i]) {
                    return false;
                }
            }
        }
        return true;
    }

JavaScript:

var isStraight = function(nums) {
    nums = nums.sort((a, b) => a - b);
    let count = 0;
    for(let i = 0; i < 4; i++) {
            if(nums[i] === 0) {
                count++;
            } else {
                if(nums[i + 1] - nums[i] > count + 1 || nums[i + 1] === nums[i]) {
                    return false;
                }
            }
        }
        return true;
};