撲克牌順子(C++牛客網)

解題思路:

(1)因爲四個王,13個數,所以如果超過了17個數,肯定不能組成順子

(2)先排序,計算開頭0的個數,超過了4個0,返回false

(3)接下里判斷每個數是否屬於1~13,超出範圍,返回false

(4)判斷相鄰是否間隔1,是則繼續判斷下一對數,否則兩者相等,返回false

(5)如果兩者大於等於2,用0的個數來填補,如果出現了0的個數爲負,返回false

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        if(numbers.size()==0 || numbers.size()>17) return false;
        sort(numbers.begin(),numbers.end());
        int count = 0,i = 0;
        while(i<numbers.size()&&numbers[i]==0) {
	    count++;
	    i++;
	}
	if(count>4) return false;
	while(i<numbers.size()-1) {
	    if(1<=numbers[i] && numbers[i]<=13 && 1<=numbers[i+1] && numbers[i+1]<=13) {
		if(numbers[i+1]-numbers[i]==1)i++;
		else if(numbers[i+1]-numbers[i]==0) return false;
		else {
		    count = count - (numbers[i+1]-numbers[i]-1);
		    if(count<0) return false;
		    else i++;
	        }
	    } else return false;
	}
	return true;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章