力扣46.全排列

1、C

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
void back(int *nums,int numsSize,int* returnSize, int** returnColumnSizes,int *visited,int *path,int *pathSize,int **result){
    if(*pathSize==numsSize){
        result[*returnSize] = (int *)malloc(sizeof(int)*numsSize);
        memcpy(result[*returnSize], path, sizeof(int) * numsSize);
        (*returnColumnSizes)[*returnSize] = numsSize;
        (*returnSize)++;
        return;
    }
    for(int i=0;i<numsSize;i++){
        if (visited[i] == 1) {
            continue;
        }
        path[*pathSize] = nums[i];
        (*pathSize)++;
        visited[i] = 1;
        back(nums,numsSize,returnSize,returnColumnSizes,visited,path,pathSize,result);
        (*pathSize)--;
        visited[i] = 0;
    }
}
int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
    *returnSize = 0;
    *returnColumnSizes = (int*)malloc(sizeof(int) * 100001);
    int *visited = (int *)calloc(numsSize,sizeof(int));
    int *path = (int *)malloc(sizeof(int)*numsSize);
    int *pathSize = (int *)calloc(1,sizeof(int));
    int **result = (int **)malloc(sizeof(int*)*100001);
    back(nums,numsSize,returnSize,returnColumnSizes,visited,path,pathSize,result);
    return result;
}

 

2、C++

class Solution {
public:
    void back(vector<int> &nums,vector<bool> &visited,vector<vector<int>> &result,vector<int> &path){
        if(path.size()==nums.size()){
            result.push_back(path);
            return;
        }
        for(int i=0;i<nums.size();i++){
            if(visited[i]){
                continue;
            }
            path.push_back(nums[i]);
            visited[i] = true;
            back(nums,visited,result,path);
            path.pop_back();
            visited[i] = false;
        }

    }
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> result;
        vector<int> path;
        vector<bool> visited(nums.size(),false);
        back(nums,visited,result,path);
        return result;
    }
};

 

3、JAVA

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> path = new LinkedList<>();
    private void back(int[] nums,boolean[] visited){
        if(nums.length == path.size()){
            result.add(new ArrayList<>(path));
            return;
        }
        for(int i =0;i<nums.length;i++){
            if(visited[i]){
                continue;
            }
            visited[i] = true;
            path.add(nums[i]);
            back(nums,visited);
            path.removeLast();
            visited[i] = false;
        }
    }
    public List<List<Integer>> permute(int[] nums) {
        boolean visited[] = new boolean[nums.length];
        back(nums,visited);
        return result;
    }
}

 

4、Python

 

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        visited = [False] * len(nums)
        path = []
        result = []
        self.back(nums,visited,path,result)
        return result

    def back(self,nums,visited,path,result):
        if len(path)==len(nums):
            result.append(path[:])
            return
        for i in range(0,len(nums)):
            if visited[i]:
                continue;
            path.append(nums[i])
            visited[i] = True
            self.back(nums,visited,path,result)
            path.pop() 
            visited[i] = False

 

原文地址:http://www.cnblogs.com/cmkbk/p/16911928.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性