首页 > 编程语言 >四种语言刷算法之全排列

四种语言刷算法之全排列

时间:2022-11-25 12:55:31浏览次数:55  
标签:nums int 之全 back 算法 result visited path 四种

力扣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

 

标签:nums,int,之全,back,算法,result,visited,path,四种
From: https://www.cnblogs.com/cmkbk/p/16911928.html

相关文章

  • PHP判断访客是否移动端浏览器访问的四种方法
    在平常工作开发中,我们通常需要开发出PC端和移动端两个不同的系统,从而根据访问端的不同进入到不同的操作界面中。这就需要我们首先要对访问的客户端进行判断是PC端还是移动端......
  • 9.排序算法
    1.冒泡排序基本介绍:  冒泡排序的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),一次比较相邻元素的值,如果发现逆序,使较大的元素逐渐从前向后移动。 因为......
  • 四种PHP异步执行的常用方式
    客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果。有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回给客......
  • 算法基础:子矩阵的和
    算法:子矩阵的和以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵的和为:s[x2,y2]-s[x1-1,y2]-s[x2,y1-1]+s[x1-1,y1-1]#include<bits/stdc++.h>using......
  • 算法基础
    算法:前缀和#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;inta[N],s[N];//s[N]前缀和数组s[i]=a[1]+a[2]+a[3]+...+a[i]int......
  • 每日算法之二维数组中的查找
    JZ4二维数组中的查找描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这......
  • 算法5: LeetCode_单链表_两数相加
    题目:*给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。*请你将两个数相加,并以相同形式返回一个......
  • 算法基础
    算法——差分https://www.acwing.com/problem/content/description/799/#include<bits/stdc++.h>usingnamespacestd;constintN=100010;inta[N],b[N];intm......
  • DBSCAN聚类算法
    1.基于密度的聚类算法基于密度的聚类算法主要思想是只要邻近区域的密度(对象的个数)超过某个阈值,就把它加入到与之相近的聚类中。基于密度的聚类算法代表有DBSCAN算法......
  • 排序算法
    零、总览(一)术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成......