剑指Offer面试题 44:扑克牌从大到小的順子
从扑克牌从大到小中随机抽 5 张牌判断是不是顺子,即这 5 张牌是不是连续的 2-10 为数字本身,A 为 1J 为 11,Q 为 12K 为 13,而大小王可以看成任意嘚 数字
运算结果为true,如果4修改为3则为false
第一步:首先把大小王的值默认设置为0然后计算出随机抽取出来的王的个数,用numberZero表示在示例中int array = [0,4,6,8,0],即第一个和最后一个为抽取出来的两个王所以numberZero为2.
第二步:从新排序数组,安从小到大的顺序:[0,0,4,6,8]
为了明白接下来的说明引入一个名词:坡度,对应示例中的numberGap我们定义坡度为数组相邻两个值的差减去1(此处的数组为去掉大小王也就是去掉0之后的数组,比如[4,6,8]).统计出所有嘚相邻坡度和:6和4的坡度为1,8和6的坡度为1.所以数组的总坡度为1+1=2.该示例中计算坡度的代码:
在该示例中计算坡度numberGap结果为2
第三步:如果大小王也僦是0的个数小于总坡度数,则随机抽取的牌不是连续的反之则连续。
对比生活中的例子:比如盖楼梯一阶是一块砖,有时候失误一阶高度变成了两块砖或三块砖此刻修补的方法就是你手里有几个王,一个王就可以弥补一阶的失误