本文主要是介绍每日一题 <leetcode--2326.螺旋矩阵>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://leetcode.cn/problems/spiral-matrix-iv/
函数中给出的int* returnSize和int** returnColumnSizes是需要我们返回数值的,这点需要注意。其中int** returnColumnSizes 是需要额外开辟一块空间。
这道题我们首先需要malloc出一快空间来把链表存放在数组中,然后题目中说了如果还存在剩余的空格,则用
-1
填充,所以我们使用memset函数来把这个数组的初值给赋值为-1,在随后的操作中会用链表中的值一一覆盖掉数组中原有的值-1。其次就是实现螺旋矩阵,这里 我是先填充外层,最后再填充内层。
int** spiralMatrix(int m, int n, struct ListNode* head, int* returnSize, int** returnColumnSizes) {int** ans = (int**)malloc(sizeof(int*) * m);//返回数组每行的列数*returnColumnSizes = (int*)malloc(sizeof(int) * m);//返回行数*returnSize = m;//初始化二维数组for(int i = 0 ; i < m ;i++){//为二维数组的每一行开辟相对应列数的空间ans[i] = (int*)malloc(sizeof(int) * n);//把二维数组中的数的初始值给设为-1memset(ans[i] , -1 , sizeof(int)*n);//返回每行的列数(*returnColumnSizes)[i] = n;}for(int i = 0, j = 0;i<m && j<n ; i++,j++){if(!head){return ans;}int i_s = i, j_s = j;//从第一行开始从左往右开始放入数据while(j_s < n && head){ans[i_s][j_s] = head->val;head = head->next;j_s++;}j_s--;i_s++;//第二行最后一个数往下放入数据while(i_s < m && head){ans[i_s][j_s] = head->val;head = head->next;i_s++;}i_s--;j_s--;while(j_s >= j && head){ans[i_s][j_s] = head->val;head = head->next;j_s--;}j_s++;i_s--;while(i_s > i && head){ans[i_s][j_s] = head->val;head = head->next;i_s--;}//外层已经放满数据,开始放内层n--;m--;}return ans;
}
这篇关于每日一题 <leetcode--2326.螺旋矩阵>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!