LeetCode-59. 螺旋矩阵
一、C实现
1. 参考
https://www.acoier.com/2021/03/15/54.%20%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5%EF%BC%88%E4%B8%AD%E7%AD%89%EF%BC%89/
注: 里面有多种解法
2. 递归实现
#include <stdio.h> #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) int min_val(int x, int y) { return x < y ? x : y; } int max_val(int x, int y) { return x > y ? x : y; } /* 以矩阵左上角为原点,竖向下是x轴,水平向右为y轴 */ int circule(int mat[][4], int sz, int x1, int y1, int x2, int y2, int *arr, int idx) { int i; /* 递归退出条件1-对应正方形矩阵 */ if (x1 > x2 || y1 > y2) { printf("idx=%d\n", idx); return idx; } /* 递归退出条件2-对应长方形矩阵,长>高 */ if (x1 == x2) { for (i = y1; i <= y2; i++) { arr[idx++] = mat[x1][i]; } return idx; } /* 递归退出条件3-对应长方形矩阵,长<高 */ if (y1 == y2) { for (i = x1; i <= x2; i++) { arr[idx++] = mat[i][y1]; } return idx; } /* 记录当前圈 */ for (i = y1; i < y2; i++) arr[idx++] = mat[x1][i]; for (i = x1; i < x2; i++) arr[idx++] = mat[i][y2]; for (i = y2; i > y1; i--) arr[idx++] = mat[x2][i]; for (i = x2; i > x1; i--) arr[idx++] = mat[i][y1]; /* 统计下一圈 */ return circule(mat, sz, x1+1, y1+1, x2-1, y2-1, arr, idx); } #define MAT_CON 4 int main() { int i, len; int mat[][MAT_CON] = { { 1, 2, 3, 4}, {12, 13, 14, 5}, {11, 16, 15, 6}, {10, 9, 8, 7}, }; int arr[100]; /* 传参时注意行列坐标 */ len = circule(mat, ARRAY_SIZE(mat), 0, 0, ARRAY_SIZE(mat)-1, MAT_CON-1, arr, 0); for (i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); printf("len=%d\n", len); printf("ARRAY_SIZE(mat)=%lu\n", ARRAY_SIZE(mat)); //3 return 0; }
分类:
算法
posted on 2025-02-17 14:39 Hello-World3 阅读(1) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-02-17 battery-historian V2.0的数据获取及参数分析
2020-02-17 /sys/power/pm_async 文件解读
2019-02-17 JNI学习笔记_C调用Java