美文网首页LeetCode蹂躏集
2018-06-05 840. Magic Squares In

2018-06-05 840. Magic Squares In

作者: alexsssu | 来源:发表于2018-06-05 21:08 被阅读0次

    题意:给你一个二维数组,判断有多少个神奇正方形,神奇正方形:三行三列,包含1-9个不同的数字,每行、每列、每个对角线加起来和相等。
    解题思路:
    遍历这个二维数组,行和列都为从0—— (size()-2),然后判断这九个数是否构成神奇正方形。

    class Solution {
    public:
        int numMagicSquaresInside(vector<vector<int>>& grid) {
            int cnt = 0;
            for(int i = 0; i < (int)grid.size()-2; i++){
                for(int j = 0; j < (int)grid[i].size()-2; j++){
                    if(isMagicSquare(i, j, grid))
                        cnt++;
                }
            }
            return cnt;
        }
        int isMagicSquare(int i, int j, vector<vector<int>> & grid){
            int sum = grid[i][j] + grid[i][j+1] + grid[i][j+2];
            vector<int> nums(10);
            for(int k1 = 0; k1 < 3; k1++){
                int row = 0, column = 0;
                for(int k2 = 0; k2 < 3; k2++){
                    row += grid[i+k1][j+k2];
                    column += grid[i+k2][j+k1];
                    if(0 < grid[i+k1][j+k2] && grid[i+k1][j+k2] < 10)
                        nums[grid[i+k1][j+k2]] = grid[i+k1][j+k2];
                    else 
                        return false;
                }
                if(row != sum || column != sum)
                    return false;
            }
            int dia1 = 0, dia2 = 0;
            for(int k3 = 0; k3 < 3; k3++){
                dia1 += grid[i+k3][j+k3];
                dia2 += grid[i+k3][j+2-k3];
            }
            if(dia1 != sum || dia2 != sum)
                return false;
            for(int q = 1; q < 10; q++)
                if(nums[q] != q)
                    return false;
            return true;
        }
    };
    

    需要注意的是:
    在遍历二维数组的时候,vector.size()函数返回的类型是size_type,“size_type由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型。”
    所以说size_type类型为无符号型,当使用vector.size() - 2作为判断条件是,可能出现vector.size()小于2的情况,这是会出现内存溢出或内存截断的问题,造成判断条件失效。
    解决办法是使用强制类型转换,(int)vector.size() -2即可。

    相关文章

      网友评论

        本文标题:2018-06-05 840. Magic Squares In

        本文链接:https://www.haomeiwen.com/subject/llgmsftx.html