【发布时间】:2018-06-29 22:18:07
【问题描述】:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int row = nums.size();
int col = nums[0].size();
vector<vector<int>> newNums;
if((row*col) < (r*c)){
return nums;
}
else{
deque<int> storage;
for(int i = 0; i < row; i++){
for(int k = 0; k < col; k++){
storage.push_back(nums[i][k]);
}
}
for(int j = 0; j < r; j++){
for(int l = 0; l < c; l++){
newNums[j][l] = storage.pop_front();
}
}
}
return newNums;
}
嘿,伙计们,我遇到了一个问题,我在“不应忽略的无效值”上方收到标题的上述错误。当我查看错误消息时,提示说明 “这是一条 GCC 错误消息,表示函数的返回值为 'void',但您正试图将其分配给非 void 变量。不允许将 void 分配给整数或任何其他类型。” 阅读此内容后,我认为我的双端队列没有被填充;但是,我不知道为什么我的双端队列没有被填充。如果你们想知道我要解决的问题,我将在下面发布。另外,我无法通过调试器运行它,因为它不会编译:(。提前致谢。
在 MATLAB 中有一个非常有用的函数叫做'reshape',它可以将一个矩阵重新整形为一个不同大小的新矩阵,但保留它的原始数据。
给定一个由二维数组表示的矩阵,以及两个正整数 r 和 c,分别表示想要的重构矩阵的行号和列号。
重构后的矩阵需要以与原来相同的行遍历顺序填充原始矩阵的所有元素。
如果给定参数的'reshape'操作是可行且合法的,则输出新的reshape矩阵;否则,输出原始矩阵。
Example 1: Input: nums = [[1,2], [3,4]] r = 1, c = 4 Output: [[1,2,3,4]] Explanation: The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.
【问题讨论】:
-
pop_front()不会返回从向量中移除的元素,因此您不能将其分配给newNums[j][l]
标签: c++