zoukankan      html  css  js  c++  java
  • [Swift]LeetCode782. 变为棋盘 | Transform to Chessboard

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10543176.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    An N x N board contains only 0s and 1s. In each move, you can swap any 2 rows with each other, or any 2 columns with each other.

    What is the minimum number of moves to transform the board into a "chessboard" - a board where no 0s and no 1s are 4-directionally adjacent? If the task is impossible, return -1.

    Examples:
    Input: board = [[0,1,1,0],[0,1,1,0],[1,0,0,1],[1,0,0,1]]
    Output: 2
    Explanation:
    One potential sequence of moves is shown below, from left to right:
    
    0110     1010     1010
    0110 --> 1010 --> 0101
    1001     0101     1010
    1001     0101     0101
    
    The first move swaps the first and second column.
    The second move swaps the second and third row.
    
    Input: board = [[0, 1], [1, 0]]
    Output: 0
    Explanation:
    Also note that the board with 0 in the top left corner,
    01
    10
    
    is also a valid chessboard.
    
    Input: board = [[1, 0], [1, 0]]
    Output: -1
    Explanation:
    No matter what sequence of moves you make, you cannot end with a valid chessboard.
    

    Note:

    • board will have the same number of rows and columns, a number in the range [2, 30].
    • board[i][j] will be only 0s or 1s.

    一个 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时也是合法的棋盘,如:
    
    01
    10
    
    也是合法的棋盘.
    
    输入: board = [[1, 0], [1, 0]]
    输出: -1
    解释:
    任意的变换都不能使这个输入变为合法的棋盘。 

    提示:

    • board 是方阵,且行列数的范围是[2, 30]
    • board[i][j] 将只包含 0或 1

    Runtime: 52 ms
    Memory Usage: 18.7 MB
     1 class Solution {
     2     func movesToChessboard(_ board: [[Int]]) -> Int {
     3         var n:Int = board.count
     4         var rowSum:Int = 0
     5         var colSum:Int = 0
     6         var rowDiff:Int = 0
     7         var colDiff:Int = 0
     8         for i in 0..<n
     9         {
    10             for j in 0..<n
    11             {
    12                 if board[0][0] ^ board[i][0] ^ board[0][j] ^ board[i][j] != 0
    13                 {
    14                     return -1
    15                 }
    16             }
    17         }
    18         for i in 0..<n
    19         {
    20             rowSum += board[0][i]
    21             colSum += board[i][0]
    22             rowDiff += (board[i][0] == i % 2 ? 1 : 0)
    23             colDiff += (board[0][i] == i % 2 ? 1 : 0)
    24         }
    25         if n / 2 > rowSum || rowSum > (n + 1) / 2 {return -1}
    26         if n / 2 > colSum || colSum > (n + 1) / 2 {return -1}
    27         if n % 2 != 0
    28         {
    29             if rowDiff % 2 != 0 {rowDiff = n - rowDiff}
    30             if colDiff % 2 != 0 {colDiff = n - colDiff}
    31         }
    32         else
    33         {
    34             rowDiff = min(n - rowDiff, rowDiff)
    35             colDiff = min(n - colDiff, colDiff)
    36         }
    37         return (rowDiff + colDiff) / 2
    38     }
    39 }
  • 相关阅读:
    iphone实时通话开源框架pjsip编译-pjsua运行测试
    iOS开发之使用pjsip开发VoIP应用程序
    Windows7下JDK+Tomcat的安装与配置
    ios xmpp开发应用后台模式接收聊天信息[转]
    IOS基础控件总结
    Objective C Foundation基础框架[转]
    Garbage Collection 垃圾收集
    Java 内存溢出分析
    Centos下MySQL使用总结
    不同项目数据交互
  • 原文地址:https://www.cnblogs.com/strengthen/p/10543176.html
Copyright © 2011-2022 走看看