赞
踩
题目:
题解:
- void swap(int * nums,int indexA,int indexB)
- {
- int temp = nums[indexA];
- nums[indexA]= nums[indexB];
- nums[indexB]= temp;
- }
-
- void prem(int* nums, int numsSize, int* returnSize, int** returnColumnSizes,int** returnNums,int offset)
- {
- if(offset == numsSize)
- {
- //遍历到末尾了
- //申请returnNums
- returnNums[*returnSize] = (int *)malloc(sizeof(int ) * numsSize);
- //拷贝内容到returnNums
- memcpy(returnNums[*returnSize],nums,sizeof(int) * numsSize );
- //记录当前拷贝内容的长度
- (*returnColumnSizes)[*returnSize] = numsSize;
- *returnSize = *returnSize + 1;
-
- }
- else
- {
-
- //回溯算法的核心
- int i;
- for(i = offset; i < numsSize; i++)
- {
- swap(nums,i,offset);//i 和 offset 交换
- prem(nums,numsSize,returnSize,returnColumnSizes,returnNums,offset+1);
- swap(nums,i,offset);//i 和 offset 交换
- }
- }
- }
-
-
- int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
- {
- //不重复的数字的全排序
- //组合次数为 n!= n *( n - 1) *( n - 2) ...... 2 * 1
- //这样的方法适合回溯的方法
- //取值范围1 <= nums.length <= 6 = 6 * 5 * 4 * 3 *2 * 1 = 720中可能
- int **returnNums = (int **)malloc(sizeof(int *) * 721);
- *returnColumnSizes= (int *)malloc(sizeof(int ) * 721);
- *returnSize = 0;
- prem(nums,numsSize,returnSize,returnColumnSizes,returnNums,0);
- return returnNums;
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。