47. 全排列 II

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 *path,int *pathSize,int **result,int *visited){
if(numsSize==*pathSize){
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||(i>0&&nums[i-1]==nums[i]&&visited[i-1]==0)){
continue;
}
path[*pathSize] = nums[i];
visited[i] = 1;
(*pathSize)++;
back(nums,numsSize,returnSize,returnColumnSizes,path,pathSize,result,visited);
visited[i] = 0;
(*pathSize)--;
}
}
void QuickSort1(int* a, int left, int right)
{
if (left >= right)
{
return;
} int begin = left, end = right;
//三数取中
//int midIndex = GetThreeMid(a,begin,end);
//Swap(&a[begin],&a[midIndex]);
int pivot = begin;
int key = a[begin]; while (begin < end)
{
//右边找小的,如果不是小于key,继续
while (begin < end && a[end] >= key)
{
end--;
}
//找到比key小的,把它放在坑里,换新坑
a[pivot] = a[end];
pivot = end;
//左边找大的,如果不是大于key,继续
while (begin < end && a[begin] <= key)
{
begin++;
}
//找到比key大的,把它放在坑里,换新坑
a[pivot] = a[begin];
pivot = begin;
} a[pivot] = key;//bengin 与 end 相遇,相遇的位置一定是一个坑
QuickSort1(a, left, pivot - 1);
QuickSort1(a, pivot + 1, right);
}
int** permuteUnique(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
QuickSort1(nums,0,numsSize-1);
*returnSize = 0;
*returnColumnSizes = (int *)malloc(sizeof(int)*100001);
int *path = (int *)malloc(sizeof(int)*numsSize);
int **result = (int **)malloc(sizeof(int *)*100001);
int *visited = (int *)calloc(numsSize,sizeof(int));
int *pathSize = (int *)calloc(1,sizeof(int));
back(nums,numsSize,returnSize,returnColumnSizes,path,pathSize,result,visited);
return result; }

2、C++

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

3、JAVA

class Solution {
List<List<Integer>> result = new ArrayList<>();
LinkedList<Integer> path = new LinkedList<>();
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;}
if(i>0&&nums[i-1]==nums[i]&&visited[i]==false&&visited[i-1]==false){
continue;
}
visited[i] = true;
path.add(nums[i]);
back(nums,visited);
path.removeLast();
visited[i] = false;
}
}
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);
boolean visited[] = new boolean[nums.length];
Arrays.fill(visited,false);
back(nums,visited);
return result;
}
}

4、Python

class Solution(object):
def __init__(self):
self.path = []
self.result = []
def back(self,nums,visited):
if len(nums)==len(self.path):
self.result.append(self.path[:])
return
for i in range(len(nums)):
if visited[i]==True:
continue
if i>0 and nums[i-1]==nums[i] and visited[i-1]==False:
continue
visited[i]=True
self.path.append(nums[i])
self.back(nums,visited)
self.path.pop()
visited[i]=False def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums.sort()
visited = [False]*len(nums)
self.back(nums,visited)
return self.result

四种语言刷算法之47. 全排列 II的更多相关文章

  1. php四种基础排序算法的运行时间比较

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  2. SQL的四种语言和数据库范式

    1. SQL的四种语言 DDL(Data Definition Language)数据库定义语言 CREATE ALTER DROP TRUNCATE COMMENT RENAME DML(Data ...

  3. PHP四种基本排序算法

    PHP的四种基本排序算法为:冒泡排序.插入排序.选择排序和快速排序. 下面是我整理出来的算法代码: 1. 冒泡排序: 思路:对数组进行多轮冒泡,每一轮对数组中的元素两两比较,调整位置,冒出一个最大的数 ...

  4. php四种基础排序算法的运行时间比较!

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  5. 47. 全排列 II

    47. 全排列 II 题意 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]] 解题思路 去重的全排列 ...

  6. Leetcode之回溯法专题-47. 全排列 II(Permutations II)

    Leetcode之回溯法专题-47. 全排列 II(Permutations II) 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2] ...

  7. [LeetCode] 47. 全排列 II

    题目链接 : https://leetcode-cn.com/problems/permutations-ii/ 题目描述: 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [ ...

  8. Java实现 LeetCode 47 全排列 II(二)

    47. 全排列 II 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] class Solut ...

  9. leetcode 46. 全排列 及 47. 全排列 II

    46. 全排列 问题描述 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3 ...

  10. 每个Java程序员都必须知道的四种负载均衡算法

    前言 一般来说,我们在设计系统的时候,为了系统的高扩展性,会尽可能的创建无状态的系统,这样我们就可以采用集群的方式部署,最终很方便的根据需要动态增减服务器数量.但是,要使系统具有更好的可扩展性,除了无 ...

随机推荐

  1. Windows搭建Git服务器

    Windows如何搭建Git服务器 1.安装java环境 (1)下载安装java 注意(java的版本需要在1.7及以上) (2)配置java的环境变量 (3)检验java环境是否安装成功 2.下载安 ...

  2. 手写promise解决回调地狱问题

    在介绍promise之前我们先来看一段代码: 根据案例我们可以看出,这段代码可以无限的嵌套下去,但是每嵌套一层,代码的运行就会降低,而解决回调地狱最好的办法就是new promise 一.什么是 pr ...

  3. [0x11] 131.直方图中最大的矩形【单调栈】

    题意 link(more:SPOJ1805) 如图,在水平线上有 \(n(n\leqslant10^5)\) 个宽度为 1 ,高度为 \(h(0\leqslant h\leqslant10^9)\) ...

  4. Less-1(GET字符型)

    union联合注入(方法一) 进入靶场 按照要求提交一个id:http://192.168.121.131/sqli/Less-1/?id=1 数据库执行语句:select * from news w ...

  5. 企业应用架构研究系列二十四:SQL Server 数据库调优之XEvent 探查器

    如果入职一些中小型公司,往往需要接手一些很"坑"的项目,到底多坑就不牢骚了,只讲一下,如果破解这些历史遗留的项目问题.项目代码可能短时间无法进行通读研究,我们就需要从底层数据库进行 ...

  6. 学习ASP.NET Core Blazor编程系列二十一——数据刷新

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  7. 反馈电路的Bode分析法

    1 前言 在反馈电路的分析中,如果前向放大倍数为Aopen,反馈系数为β,则闭环传递函数Aclose=Aopen/(1+Aopenβ),其中Aopenβ为环路增益.但是,在Aopen和β的计算中均要考 ...

  8. QtCharts模块勾画折线和曲线图

    QtCharts画线图主要三个部分组成 QLIneSeries或QSplineSeries用于保存联系的坐标位置数据,QChart用于管理图像显示,例如图例,坐标主题等,QChartView则用于显示 ...

  9. 【HMS Core】使用机器学习服务和搜索服务识别植物

    ​1.介绍 总览 机器学习服务(ML Kit)为开发者提供简单易用.服务多样.技术领先的机器学习能力,助力开发者更快更好地开发各类AI应用.同时,搜索服务(Search Kit)通过端侧SDK和云侧A ...

  10. 数据库系列:MySQL慢查询分析和性能优化

    1 背景 我们的业务服务随着功能规模扩大,用户量扩增,流量的不断的增长,经常会遇到一个问题,就是数据存储服务响应变慢. 导致数据库服务变慢的诱因很多,而RD最重要的工作之一就是找到问题并解决问题. 下 ...