从52张牌中随意取5张,看是否能组成顺子
题目
从52张牌中随意取5张,看是否能组成顺子
其中1~k 表示1~13 大小王可以代替任意数字
解题
首先可以将牌映射到数组上,然后将数组排序
在使用左右两端的指针向中间靠
如果左指针与接下来的值相差1或者接下来的值时大小王 则过到下一个
否则判断右指针是否有大小王 有的话右指针左移一位
现在有牌排序之后的样纸
1,2,4,5,king
^ ^
第一次判断的时候可以发现1=2-1 正好成顺序
1,2,4,5,king
^ ^
但是在第二次迭代中会发现这次2!=4-1
所以要去判断最后面是否存在q,如果存在,这右指针前面移动
1,2,4,5,king
^ ^
然后这里不断迭代即可,直到左右指针碰到一起
代码
1 | /** |
可以看一下测试代码:1
2
3
4
5
6
7
8
9
10
11
12
13public static void main(String[] args) {
//这里使用Integer.MAX_VALUE表示大小王
int[] a={1,2,3,4,5};
System.out.println(cardStraight(a));
int[] b={1,2,3,4,3};
System.out.println(cardStraight(b));
int[] c={1,2,3,4,Integer.MAX_VALUE};//有一个大小王
System.out.println(cardStraight(c));
int[] d={1,Integer.MAX_VALUE,Integer.MAX_VALUE,4,Integer.MAX_VALUE};//有好多大小王
System.out.println(cardStraight(d));
int[] e={1,Integer.MAX_VALUE,Integer.MAX_VALUE,6,Integer.MAX_VALUE};//有好多大小王 但是最大的牌也太大了
System.out.println(cardStraight(e));
}
最终结果为:
true
false
true
true
false
本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权