剑指 Offer 45. 把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
题意理解: 根据数组中的数字进行打乱组合成一个最小的字符
- 使用数组内置排序,并自定义排序规则,n1n2-n2n1相比较进行互换
- 进行拆分
提示: 0 < nums.length <= 100
示例 1: 输入: [10, 2] 输出: "102"
示例 2: 输入: [3, 30, 34, 5, 9] 输出: "3033459"
var minNumber = function(nums) {
const cUnms = nums.sort((a, b) => `${a}${b}` - `${b}${a}`).join('');
return cUnms;
};
剑指 Offer 61. 扑克牌中的顺子
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
题意理解: 如果给出的五个数字可以连续,或替换大小王后可以连续,返回true; 否则为false
- 遍历数组,如果数组中存在两个相同的值,则返回false
- 申明两个变量,存储最大值和最小值,如果最大值建最小值+1<=5则返回true
限制: 数组长度为 5 数组的数取值为 [0, 13] .
示例 1: 输入: [1, 2, 3, 4, 5] 输出: True
示例 2: 输入: [0, 0, 1, 2, 5] 输出: True
var isStraight = function(nums) {
let min = 0;
let max = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0 && nums.indexOf(nums[i]) !== nums.lastIndexOf(nums[i])) {
return false;
}
if (min === 0 && max === 0 && nums[i] !== 0) {
min = nums[i];
min = nums[i];
}
if (nums[i] !== 0) {
min = Math.min(min, nums[i])
max = Math.max(max, nums[i])
}
}
if (max - min + 1 <= 5) {
return true
}
return false
}