题解
思路:DFS
- 注意:力扣测试数据时不会将全局变量重置,要手动重置
| int ptr_line = 0; |
| int mark[6]; |
| void deep_find(int depth, int* nums, int** ans, int numsSize, int* temp, int size) { |
| for (int i = 0; i < numsSize; i++) { |
| if (!mark[i]) { |
| temp[depth] = nums[i]; |
| mark[i] = true; |
| if (depth < numsSize - 1) |
| deep_find(depth + 1, nums, ans, numsSize, temp, size); |
| else |
| memcpy(ans[ptr_line++], temp, sizeof(int) * numsSize); |
| mark[i] = false; |
| } |
| } |
| } |
| int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) { |
| int size = 1; |
| ptr_line = 0; |
| for (int i = 2; i <= numsSize; i++) |
| size *= i; |
| *returnSize = size; |
| *returnColumnSizes = (int*)malloc(sizeof(int) * size); |
| int** ans = (int**)malloc(sizeof(int*) * size); |
| int* temp = (int*)malloc(sizeof(int) * numsSize); |
| for (int i = 0; i < size; i++) { |
| (*returnColumnSizes)[i] = numsSize; |
| ans[i] = (int*)malloc(sizeof(int) * numsSize); |
| } |
| deep_find(0, nums, ans, numsSize, temp, size); |
| return ans; |
| } |
测试函数
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| int main() { |
| int nums[5] = { 1, 2, 3, 4, 5 }; |
| int** ans = permute(nums, 5); |
| for (int i = 0; i < 120; i++) |
| printf("%d %d %d %d %d\n", ans[i][0], ans[i][1], ans[i][2], ans[i][3], ans[i][4]); |
| system("pause"); |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~