bool isHaveSame(int * nums,int indexleft,int indexRight) { while (indexleft < indexRight) { if (nums[indexleft] == nums[indexRight]) return true; indexRight--; } return false; } 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 index = offset; int i; for(i = offset; i < numsSize; i++) { if(!isHaveSame(nums,i,numsSize-1) ) { swap(nums,i,offset);//i 和 offset 交换 prem(nums,numsSize,returnSize,returnColumnSizes,returnNums,offset+1); swap(nums,i,offset);//i 和 offset 交换 } } } } int** permuteUnique(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) { //重复的数字的全排序 //组合次数为 n!= n *( n - 1) *( n - 2) ...... 2 * 1 //这样的方法适合回溯的方法 //取值范围1 <= nums.length <= 8 = 8* 7* 6 * 5 * 4 * 3 *2 * 1 = 40320中可能 int **returnNums = (int **)malloc(sizeof(int *) * 40320); *returnColumnSizes= (int *)malloc(sizeof(int ) * 40320); *returnSize = 0; prem(nums,numsSize,returnSize,returnColumnSizes,returnNums,0); return returnNums; }补全main函数
时间: 2024-03-25 10:41:51 浏览: 23
这里是一个简单的main函数,可以调用上面的permuteUnique函数来打印出重复数字的全排列:
```
#include <stdio.h>
#include <stdlib.h>
int main(){
int nums[] = {1, 2, 2};
int numsSize = 3;
int returnSize;
int *returnColumnSizes;
int **returnNums = permuteUnique(nums, numsSize, &returnSize, &returnColumnSizes);
for(int i = 0; i < returnSize; i++){
for(int j = 0; j < returnColumnSizes[i]; j++){
printf("%d ", returnNums[i][j]);
}
printf("\n");
}
//释放内存
for(int i = 0; i < returnSize; i++){
free(returnNums[i]);
}
free(returnNums);
free(returnColumnSizes);
return 0;
}
```
相关问题
bool containsDuplicate(int* nums, int numsSize)
在语言中,可以使用以下来判断一个整数数组中是否存在复元素:
```c
#include <stdbool>
bool containsDuplicate(int* nums, intSize) {
for (int i = ; i < numsSize; i++) {
for (int = i+1; j < numsSize; j++) {
if (nums[i] == nums[j]) {
return true;
}
}
return false;
}
```
这个函数接受一个整数数组 `nums`,以及数组的大小 `numsSize`,并返回一个布尔值表示是否存在重复元素。算法通过嵌套循环遍历数组中的每对元素,如果找到两个相等的元素,则返回 `true`,否则返回 `false`。
bool containsDuplicate(int* nums, int num,int size)
在C语言中,可以使用以下代码来判断一个整数数组中是否存在重复元素:
```c
#include <stdbool.h>
bool containsDuplicate(int* nums, int size) {
for (int i = 0; i < size; i++) {
for (int j = i+1; j < size; j++) {
if (nums[i] == nums[j]) {
return true;
}
}
}
return false;
}
```
这个函数接受一个整数数组 `nums`,以及数组的大小 `size`,并返回一个布尔值表示是否存在重复元素。算法通过嵌套循环遍历数组中的每对元素,如果找到两个相等的元素,则返回 `true`,否则返回 `false`。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)