LeetCode#566 Reshape the Matrix

1 、在第几个与行列位置之间的换算时,需要考虑怎样满足数组下标从0开始。
例如,第12个在3*4矩阵的第三行第四列,使用/12/4=3...0,显然不满足数组要求。其应在[2][3]处,即11/4=2...3
2、vector<vector<int>> v(r, vector<int>(c, 0));这种写法需要掌握

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        int m = nums.size();
        int n = nums[0].size();

        if(m*n == r*c){
            vector<vector<int>> Matrix(r);
            for(int i = 0; i < r; i++){
                Matrix[i].resize(c);
                for(int j = 0; j < c; j++){
                    int tmp = i*c+j;
                    Matrix[i][j] = nums[tmp/n][tmp%n];
                }
            }

            return Matrix;
        }else
            return nums;
    }
};

然而,既然是确定位置,显然不需要这么麻烦

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        int m = nums.size();
        int n = nums[0].size();

        int count = m*n;

        if(count == r*c){
            vector<vector<int>> Matrix(r, vector<int>(c, 0));
            for(int i = 0; i < count; i++){
                Matrix[i/c][i%c] = nums[i/n][i%n];
            }
            return Matrix;
        }else{
            return nums;
        }
    }
};

岂不美哉?

猜你喜欢

转载自blog.csdn.net/rpybd/article/details/81517332