乙個 n x n的 board 僅由 0 和 1 組成 。每次移動,你能任意交換兩列或是兩行的位置。
輸出將這個矩陣變為 「棋盤」 所需的最小移動次數。「棋盤」 是指任意一格的上下左右四個方向的值均與本身不同的矩陣。如果不存在可行的變換,輸出 -1。
示例:
輸入: board = [[0,1,1,0],[0,1,1,0],[1,0,0,1],[1,0,0,1]]
輸出: 2
解釋:一種可行的變換方式如下,從左到右:
0110 1010 1010
0110 --> 1010 --> 0101
1001 0101 1010
1001 0101 0101
第一次移動交換了第一列和第二列。
第二次移動交換了第二行和第三行。
輸入: board = [[0, 1], [1, 0]]
輸出: 0
解釋:注意左上角的格值為0時也是合法的棋盤,如:
0110
也是合法的棋盤.
輸入: board = [[1, 0], [1, 0]]
輸出: -1
解釋:任意的變換都不能使這個輸入變為合法的棋盤。
board 是方陣,且行列數的範圍是[2, 30]。
board[i][j] 將只包含 0或 1。
思路分
析:\color
思路分析
:這道題我們首先需要判斷這個矩陣能不能通過變換得到棋盤,然後再考慮最小的步數變為棋盤。
0 1 0 1
1 0 1 0
0 1 0 1
1 0 1 0
或者1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
或者1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
判斷規律:
以[0,0]為左上角的任意乙個矩形的四個頂點只有三種情況,要麼四個0,要麼四個1,要麼兩個0兩個1。即四個頂點異或在一起一定是0
每行的1的個數要麼為 n/2,要麼為 (n+1)/2。統計完了首行首列1的個數,我們判斷如果其小於 n/2 或者大於 (n+1) / 2,那麼一定無法轉為棋盤
class
solution}}
//同時掃瞄第一行、第一列
for(
int i =
0; i < n;
++i)
//檢測第一行中1的個數i和零的個數j是否滿足j + 1 >= i >= j -1
if(n /
2> rowsum || rowsum >
(n +1)
/2)//檢測第一列中1的個數i和零的個數j是否滿足j + 1 >= i >= j -1
if(n /
2> colsum || colsum >
(n +1)
/2)//下分n的奇偶性計算需要調整的最小步數,分行調整、列調整
LeetCode 將資料流變為多個不相交區間
給定乙個非負整數的資料流輸入 a1,a2,an,將到目前為止看到的數字總結為不相交的區間列表。例如,假設資料流中的整數為 1,3,7,2,6,每次的總結為 1,1 1,1 3,3 1,1 3,3 7,7 1,3 7,7 1,3 6,7 高階 如果有很多合併,並且與資料流的大小相比,不相交區間的數量很...
變為回文串
我們現在給你乙個字串,我們規定只能在這個字串的右邊新增字元,問最少新增多少字元可以使這個字串變為回文串?第一行乙個正整數t 10代表測試資料個數 每組測試資料給出乙個字串s,保證 s 1000000,且只包含小寫字母 對每組測試資料,輸出最少需要新增的字元的個數3ab abaabad10 3 inc...
站點變為黑白
專案接近尾聲了,前幾天在測試的時候發現,在某個win7電腦的ie上。站點居然變成了黑白的。我的電腦是win8的系統,用ie測,更改各種文件模式均正常。令人費解。找不到原因。更改瀏覽器的各種設定,均沒有效果。上網搜資料的時候發現,非常多站點為了紀念大 或者其它日子的時候會有益把站點站點變成黑白的。沒有...