剑指offer:扑克牌顺子
首先定义个bool型的IsContinuous函数,有个数组型的参数,首先判断数组numbers的长度,小于等于4,返回错。将数组numbers进行从小到大进行排序,定义countZero的大小王数量为0,为了后面更新,index也为0,为了遍历,当索引小于数组的长度,并其中的某位为0时,大小王的数++;索引也++。for循环看i位和i+1位是不是相等,相等就错,elseif里判断相邻的数是不是来连续的,连续则继续,else语句中,计算两个挨着的数之间的差值并减去1,用大小王的总数减去总差值,更新countZero的值,如果为负值返回false,在整个循环后,countZero的值大于等于0,则返回true!!!
class Solution { public: bool IsContinuous( vector<int> numbers ) { if(numbers.size()<=4 )return false; sort(numbers.begin(),numbers.end()); int countZero = 0; int index = 0; while(index<numbers.size()&&numbers[index]==0){ countZero++; index++; } for(int i = index;i<numbers.size()-1;++i){ if(numbers[i]==numbers[i+1]) return false; else if((numbers[i]+1)==numbers[i+1]){continue;} else{countZero-=(numbers[i+1]-numbers[i]-1); } if(countZero<0) return false; } return countZero>=0; } };#剑指offer##23届找工作求助阵地#