牛客刷题笔记

刷题笔记

题目描述
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
解题思想:
先给扑克牌作从小到大的排序,再对大小王的牌做计数,因为大小王可以被当作任意一张数字牌,所以当有大小王的牌不连续的时候,存在大小王充当某些牌后变成顺子的可能性,与此同时,对于已排好序的牌要做是否出现数字重复牌的判断,如果出现,则必然无法构成顺子,返回false,如果没有重复的牌,当牌连续即能组成顺子的前提下,返回true;当牌不连续的时候,判断是否有大小王,有的话看是否满足当前不连续牌的需要(即若想让牌变连续所需要的牌数,前面已对大小王计数,依据于此做判断),满足返回true,不满足返回false。

Java代码:

public class Solution {
    public boolean isContinuous(int [] numbers) {
    if(numbers.length==0||numbers==null)
    {
        return false;
    }
        int j;int t;int k;int zero=-1;
    for(int i=0;i<numbers.length;i++)
    {
        t=i;
        for(j=i+1;j<numbers.length;j++)
        {
            if(numbers[t]>numbers[j])
                t=j;
        }
        k=numbers[t];
        numbers[t]=numbers[i];
        numbers[i]=k;
        if(numbers[i]==0)
            zero=i;
    }
  j=0; int sum=0; 
  while(j<4)
  {
      if(numbers[j]!=0&&numbers[j]==numbers[j+1])
      {
          return false;
      }
      else if(numbers[j]!=0)
          sum=numbers[j+1]-numbers[j]+sum;
      j++;
  }
   if(zero==3||(zero==2&&sum<=4)||(zero==1&&sum<=4)||(zero==0&&sum<=4)||(zero==-1&&sum==4))
       return true;
    else 
        return false;
        
}
}

运行结果:
牛客刷题笔记_第1张图片

你可能感兴趣的:(java,java)