首页 > 其他分享 >LeetCode 题解 46. 全排列

LeetCode 题解 46. 全排列

时间:2022-11-16 12:44:24浏览次数:78  
标签:numsSize temp nums 46 题解 mark int ans LeetCode

46. 全排列 - 力扣(Leetcode)

题解

思路:DFS

- 注意:力扣测试数据时不会将全局变量重置,要手动重置

C代码

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;
}

标签:numsSize,temp,nums,46,题解,mark,int,ans,LeetCode
From: https://www.cnblogs.com/fjnhyzCYL/p/16895496.html

相关文章

  • 2022.11.14模拟赛题解
    树的覆盖\(dp_{i,j,0/1/2}\)表示以\(i\)为根的子树中覆盖\(j\)个点的方案数。其中\(0/1/2\)分别表示了\(3\)种情况。\(0\)表示示当前节点和子节点都没被选中......
  • CF1748D ConstructOR 题解
    可能更好的食用体验既然题目中用到了位运算,那我们就用二进制来解决这道题。1.判无解观察\(3\,4\,6\)这个样例,我们将其分解二进制:\[\begin{aligned}(3)_{10}&=(11)......
  • 洛谷 P8509 题解(待完善)
    题面。要求所有点到关键点的距离和最小。首先要确定这个点去哪个关键点最短。树上两点间路径与距离是唯一的,所以我们从两个关键点分别跑dfs。第一遍求出每个点到s的最......
  • MYSQL ERROR 1146 Table doesnt exist 解析
    原创转载请注明出处源码版本5.7.14在MYSQL使用innodb的时候我们有时候会看到如下报错:ERROR1146(42S02):Table'test.test1bak'doesn'texist首先总结下原......
  • 神奇脑洞题解——USACO追查坏牛奶(CSGO894)
    COGS的这一题是超级满配版本比洛谷的要强力的多:894.追查坏牛奶-COGS额外要求是:求出最小割流量,同时求出割边最小,同时字典序最小的方案输出割掉的边最小割流量好求,最......
  • 【题解】[模拟赛20221115] Tree
    模拟赛20221115Tree|CQNK\(O(m*n*2^n)\)很好做,但是本题有更优秀的做法:在此记录复杂度\(O(n*2^n)\)的做法。考虑从后往前dp,设dp状态\(f_{s,0/1}\)分别表示在填......
  • 46. 全排列 ----- 回溯递归算法、交换函数
    46.全排列难度中等2304给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例1:输入:nums=[1,2,3]输出:[[1,......
  • 题解 ARC001C【パズルのお手伝い】
    postedon2021-01-1118:20:37|under题解|source前言这道题与八皇后很像,可以做完八皇后再来做这道题。如果你\(\color{white}\colorbox{red}{WA}\)了,请检查你有......
  • 题解 UVA12265【贩卖土地 Selling Land】
    postedon2022-09-2414:33:29|under题解|sourceproblem一个黑白矩阵,求以每个点为右下角,能围出的周长最大的全白矩形的周长。\(n\leq2000\)。solution试图进行......
  • 焦点科技编程挑战赛2022题解
    比赛说明:比赛在四个学校开展,南理南航南农和矿大。题目查找文本差异要求origin和dest中分别包含1000w+条数据dest对数据进行了打乱操作,即origin和dest中相同数据行的......