当前位置:   article > 正文

C语言 | Leetcode C语言题解之第46题全排列_c语言全排列returncolumnsizes

c语言全排列returncolumnsizes

题目:

题解:

  1. void swap(int * nums,int indexA,int indexB)
  2. {
  3. int temp = nums[indexA];
  4. nums[indexA]= nums[indexB];
  5. nums[indexB]= temp;
  6. }
  7. void prem(int* nums, int numsSize, int* returnSize, int** returnColumnSizes,int** returnNums,int offset)
  8. {
  9. if(offset == numsSize)
  10. {
  11. //遍历到末尾了
  12. //申请returnNums
  13. returnNums[*returnSize] = (int *)malloc(sizeof(int ) * numsSize);
  14. //拷贝内容到returnNums
  15. memcpy(returnNums[*returnSize],nums,sizeof(int) * numsSize );
  16. //记录当前拷贝内容的长度
  17. (*returnColumnSizes)[*returnSize] = numsSize;
  18. *returnSize = *returnSize + 1;
  19. }
  20. else
  21. {
  22. //回溯算法的核心
  23. int i;
  24. for(i = offset; i < numsSize; i++)
  25. {
  26. swap(nums,i,offset);//i 和 offset 交换
  27. prem(nums,numsSize,returnSize,returnColumnSizes,returnNums,offset+1);
  28. swap(nums,i,offset);//i 和 offset 交换
  29. }
  30. }
  31. }
  32. int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes)
  33. {
  34. //不重复的数字的全排序
  35. //组合次数为 n!= n *( n - 1) *( n - 2) ...... 2 * 1
  36. //这样的方法适合回溯的方法
  37. //取值范围1 <= nums.length <= 6 = 6 * 5 * 4 * 3 *2 * 1 = 720中可能
  38. int **returnNums = (int **)malloc(sizeof(int *) * 721);
  39. *returnColumnSizes= (int *)malloc(sizeof(int ) * 721);
  40. *returnSize = 0;
  41. prem(nums,numsSize,returnSize,returnColumnSizes,returnNums,0);
  42. return returnNums;
  43. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/980402
推荐阅读
相关标签
  

闽ICP备14008679号