let 46 Permutations

2024-03-29 18:18
文章标签 46 let permutations

本文主要是介绍let 46 Permutations,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Given a collection of distinct numbers, return all possible permutations.For example,
[1,2,3] have the following permutations:
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]
]

主题思想: 就是排列
排列算法,已经知道了,这里只需要注意处理下,什么时候到达边界,需要停止就好了。

这道题的收获, 就是无法把 一个 int[] 通过Arrays.asList() 转化为List<Integer> 只能通过先创建List<Integer> 然后一个一个添加的方式创建

先贴下根据一个数列生成下一个最小的permutation的算法,
从后往前找,找到最先出现的一个i,j 是nums[i]

 //return false if has next public boolean nextPermute(List<List<Integer>> ans,int [] nums){int n=nums.length;int i=0,j=0;//the flag which means whether has next permuateboolean flag=true;// find the index i is the first time where nums[i]<nums[j]for(j=n-1;j>=1;j--){i=j-1;if(nums[i]<nums[j]){flag=false;break;  } }if(flag) return flag;//find the index j where nums[j] > nums[i];for(j=n-1;j>i;j--){if(nums[j]>nums[i]) break;}//swap i,jswap(nums,i,j);//reverse from the i+1 to the endreverse(nums,i+1,n-1);List<Integer> tmp=new ArrayList<Integer>();for(int num: nums)  tmp.add(num);ans.add(tmp);return flag;}public void swap(int[] nums,int i,int j){int t=nums[i];nums[i]=nums[j];nums[j]=t;return ;}public void reverse(int []nums,int low,int hi){if(hi<=low) return ;while(low<hi){swap(nums,low,hi);low++;hi--;}return ;}

最后AC代码:

class Solution {public List<List<Integer>> permute(int[] nums) {List<List<Integer>> ans=new ArrayList<List<Integer>>();if(nums==null||nums.length<1) return ans;Arrays.sort(nums);List<Integer> tmp=new ArrayList<Integer>();for(int i: nums) tmp.add(i);ans.add(tmp);int n=nums.length;if(n==1) return ans;boolean flag=false;while(!flag){flag=nextPermute(ans,nums);}return ans;//}//return false if has next public boolean nextPermute(List<List<Integer>> ans,int [] nums){int n=nums.length;int i=0,j=0;//the flag which means whether has next permuateboolean flag=true;// find the index i is the first time where nums[i]<nums[j]for(j=n-1;j>=1;j--){i=j-1;if(nums[i]<nums[j]){flag=false;break;  } }if(flag) return flag;//find the index j where nums[j] > nums[i];for(j=n-1;j>i;j--){if(nums[j]>nums[i]) break;}//swap i,jswap(nums,i,j);//reverse from the i+1 to the endreverse(nums,i+1,n-1);List<Integer> tmp=new ArrayList<Integer>();for(int num: nums)  tmp.add(num);ans.add(tmp);return flag;}public void swap(int[] nums,int i,int j){int t=nums[i];nums[i]=nums[j];nums[j]=t;return ;}public void reverse(int []nums,int low,int hi){if(hi<=low) return ;while(low<hi){swap(nums,low,hi);low++;hi--;}return ;}
}

这篇关于let 46 Permutations的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859296

相关文章

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

【JavaScript】let与var的区别及变量、函数提升

有var与无var的区别   在函数内部,有var和没var声明的变量是不一样的。有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口。 let与var的区别   在上面代码中,我们使用var语句声明变量x。因此,变量x的范围是函数范围。if语句内的变量x就是if语句外创建的变量x。因此,在你修改if语句块内变量x的值的时候,也会修改函数中变量x的所有引用的

天然药物化学史话:“四大光谱”在天然产物结构鉴定中的应用-文献精读46

天然药物化学史话:“四大光谱”在天然产物结构鉴定中的应用,天然产物化学及其生物合成必备基础知识~ 摘要 天然产物化学研究在药物研发中起着非常重要的作用,结构研究又是天然产物化学研究中最重要的工作之一。在天然药物化学史话系列文章的基础上,对在天然产物结构研究中起绝对主导作用的“四大光谱”分析技术,即红外光谱、紫外光谱、质谱、核磁共振波谱在天然产物结构鉴定中的应用历史进行回顾与总结,并对其发展

s let 和const的区别 ,它们可以变量提升吗

在 JavaScript 中,let 和 const 是 ES6 引入的新变量声明关键字,它们与之前的 var 关键字相比,有几个重要的区别。特别是关于变量提升(hoisting)的行为不同。 变量提升(Hoisting) 在 JavaScript 中,“变量提升”是指变量声明会被提升到作用域的顶部,但变量的初始化不会。这意味着你可以先使用变量,然后再声明它。然而,let 和 const 的行

LeetCode 46 Permutations + LeetCode 47 Permutations II

题意: 给出一串(46题)不重复or(47题)有重复的数字,要求输出所有排列。 思路: 有没有重复不影响思路 = =。 代码展示为46题提交结果,47题一样过…… 可以偷懒用next_permutation方法也可以自己实现,实现方法为从后往前找第一个出现的nums[i] < nums[i+1],从i后面找出比nums[i]稍大一点的数字nums[x],交换nums[i]和nums[

【Rust】006-Rust 枚举与`match`、`if let`、`let else`

【Rust】006-Rust 枚举与match、if let、let else 文章目录 【Rust】006-Rust 枚举与`match`、`if let`、`let else`一、简介二、使用场景三、基本使用1、定义枚举2、使用枚举 四、功能详解1、带数据的枚举2、使用`match`进行模式匹配3、使用`if let`简化特定变体的处理4、使用`let else`处理带条件的匹配 五、

[C++11#46](三) 详解lambda | 可变参数模板 | emplace_back | 默认的移动构造

目录 一.lambda 1. 捕捉列表 2. 底层原理 二. 可变参数模板 1. 递归函数方式展开参数包 2. 数组接收方式展开参数包 3. 运用 4.emplace_back 5.移动构造和拷贝构造 强制生成 default 一.lambda 可调用类的对象 函数指针--少用 void(*ptr) (int x) 仿函数--构造类 重载 operator() 对象

代码随想录算法训练营第35天|背包问题基础、46. 携带研究材料(01背包二维解法)(01背包一维解法)(acm)、416. 分割等和子集

目录 0、背包问题基础01背包 46. 携带研究材料(01背包)1、题目描述2、思路3、code(二维解法)3-1、code(一维解法)4、复杂度分析 416. 分割等和子集1、题目描述2、思路3、code4、复杂度分析 0、背包问题基础 01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能

46. 把数字翻译成字符串【难】

comments: true difficulty: 中等 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9846.%20%E6%8A%8A%E6%95%B0%E5%AD%97%E7%BF%BB%E8%AF%91%E6%88%90%E5%AD%97%E7%AC%A6%E4%

[2016-04-19 15:46:03 - IceHoloReader1.0] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER [20

[2016-04-19 15:46:03 - IceHoloReader1.0] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER [2016-04-19 15:46:03 - IceHoloReader1.0] Please check logcat output for more details. [2016-04-19 15: