手写代码:5个扑克牌是否是顺子,大小王当成任意的
var checkDynasty = function (places) {
// 排序
places.sort((a, b) => {
return a - b;
});
// 0数量
let zeroNum = places.filter((num) => {
return num === 0;
}).length;
for (let i = zeroNum + 1, pre = places[zeroNum]; i < places.length; i++) {
if (places[i] === pre) {
return false;
} else if (places[i] === pre + 1) {
} else {
if (places[i] - pre - 1 <= zeroNum) { // 0足够补
zeroNum -= places[i] - pre - 1;
} else {
return false;
}
}
pre = places[i];
}
return true;
}; package 剑指Offer;
// 9月20日,深圳字节跳动测试开发工程师-产品研发一面手撕代码
import java.util.Arrays;
public class JZ45_扑克牌顺子_中等_通过_9月20日 {
public static void main(String[] args) {
int[] arr = { 0, 3, 2, 6, 4 };
System.out.println(isContinuous(arr));
}
public static boolean isContinuous(int[] numbers) {
// 长度不为5的直接返回
if (numbers.length != 5)
return false;
// 排个序,下面继续
Arrays.sort(numbers);
for (int i = 0; i < numbers.length; i++) {
// 大小王处理成0,代表可以称为任意一张卡片
if (numbers[i] != 0) {
// 最大的和最小的差不能超过4,超过4,5张开一定组不成顺子
if (numbers[4] - numbers[i] > 4)
return false;
else {
break;
}
}
}
// 判断5张卡里面是否有重复出现的,存在重复出现的情况,一定组不成顺子
int number = numbers[0];
for (int i = 1; i < numbers.length; i++) {
// 0不做判断,即大小王可以随意调整
if (numbers[i] != 0 && numbers[i] == number) {
return false;
}
number = numbers[i];
}
return true;
}
}
看看注释,讲解写注释里面了