首页 > 试题广场 >

手写代码:5个扑克牌是否是顺子,大小王当成任意的

[问答题]

手写代码: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;
};

发表于 2023-11-16 00:50:22 回复(0)
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;
	}
}
看看注释,讲解写注释里面了
发表于 2020-09-20 18:36:50 回复(0)