1 class Solution 2 { 3 public: 4 int minDominoRotations(vector<int>& A, vector<int>& B) 5 { 6 int rrnt = INT_MAX; 7 for(int i = 1; i <= 6;i ++) 8 { 9 for(int j = 0;j < 2;j ++) 10 { 11 int rnt = 0; 12 if(j==0) 13 { 14 int k; 15 for(k = 0;k < A.size();k ++) 16 { 17 if(A[k]!=i&&B[k]==i) 18 rnt ++; 19 else if(A[k]!=i&&B[k]!=i) 20 break; 21 } 22 if(k==A.size()) 23 rrnt = min(rrnt,rnt); 24 } 25 else 26 { 27 int k; 28 for(k = 0;k < A.size();k ++) 29 { 30 if(B[k]!=i&&A[k]==i) 31 rnt ++; 32 else if(B[k]!=i&&A[k]!=i) 33 break; 34 } 35 if(k==A.size()) 36 rrnt = min(rrnt,rnt); 37 } 38 } 39 } 40 if(rrnt==INT_MAX) 41 return -1; 42 else 43 return rrnt; 44 } 45 };
假设上面一排全是1,或者下面一排全是1,或者上面一排全是2,或者下面一排全是2......一共12个循环。每种循环如果不符合,就翻转一下看看对面能不能给他安排上,如果翻转过还是安排不上,那这种情况就不可能,开始下一轮循环。