当前位置: 首页 > news >正文

合肥企业建站系统模板可口可乐网络营销策划方案

合肥企业建站系统模板,可口可乐网络营销策划方案,仿煎蛋 wordpress 主题,建筑外观设计网站1.问题描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案 示例1 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例2 输入:nums [0,1] 输出&#xf…

1.问题描述

        给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案

        示例1

        输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

        示例2

        输入:nums = [0,1] 输出:[[0,1],[1,0]]

        示例3

输入:nums = [1]输出:[[1]]

        提示

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

        难度等级

                中等

        题目链接

                全排列

2.解题思路

        这道题要求我们返回所有可能的全排列,每一个数都有可能在每一个位置出现,这里我们要用到回溯的思想。

        在解题之前,我们要先来定义一些变量,我们的一个排列,可以用一个List集合来表示,我们可以用一个辅助的List集合来寻找所有的全排列,并定义一个用来存储最终所有全排列的List数组(data),接着,我们还需要一个标识数组,来标识nums中的哪些数已经在当前排列中出现过了,防止出现同一个nums[i],在一个排列中排了两次。

        List<List<Integer>> data = new ArrayList<>();boolean[] used = new boolean[nums.length];

        这道题我们可以编写一个递归+回溯的方法来找到所有的排列。

        递归的结束条件是当辅助List的个数等于nums数组的个数时,说明所有的数都已经拿出来进行排列了,已经得到一个新的排列,这时,创建一个新的List将辅助数组的元素存入新的List中,再将List存入最终用来存储所有全排列的List集合中,然后直接返回即可。

        //如果list的大小 = nums的个数,说明得到一个排列if(list.size() == nums.length){//添加新的排列data.add(new ArrayList<>(list));return;}

        正常的递归逻辑也很简单,用一个for循环对nums数组进行遍历,先判断当前的数是否已经在辅助List排列了,如果已经在List中排列,则跳过这一个数。

        //遍历nums数组,将还没排列的数字取出来进行排序for(int i = 0;i < nums.length;i++){//已经被用过的数,直接跳过if(used[i] == true){continue;}......}

        如果还没有在参与排列,则将标记改为true并添加到辅助List中,参与排列,接着递归调用当前方法继续进行查找。找到包含当前子排列的所有排列之后,我们还需要对当前的排列进行回溯,将标记重新改回false,并将当前对应的这个数从辅助list中取出,防止对后面的排列造成影响。

        //遍历nums数组,将还没排列的数字取出来进行排序for(int i = 0;i < nums.length;i++){......//标记为已使用used[i] = true;//添加到当前的排列中list.add(nums[i]);//递归backtrack(data,list,nums,used);//回溯list.remove(list.size()-1);used[i] = false;}

        当递归方法完全执行完成之后,直接将用来存储全排列的List集合(data)返回即可。

        backtrack(data,new ArrayList<Integer>(),nums,used);return data;

3.代码展示

class Solution {public List<List<Integer>> permute(int[] nums) {List<List<Integer>> data = new ArrayList<>();boolean[] used = new boolean[nums.length];backtrack(data,new ArrayList<Integer>(),nums,used);return data;}public void backtrack(List<List<Integer>> data,List<Integer> list,int[] nums,boolean[] used){//如果list的大小 = nums的个数,说明得到一个排列if(list.size() == nums.length){//添加新的排列data.add(new ArrayList<>(list));return;}//遍历nums数组,将还没排列的数字取出来进行排序for(int i = 0;i < nums.length;i++){//已经被用过的数,直接跳过if(used[i] == true){continue;}//标记为已使用used[i] = true;//添加到当前的排列中list.add(nums[i]);//递归backtrack(data,list,nums,used);//回溯list.remove(list.size()-1);used[i] = false;}}
}

4.总结

        这道题没什么太大的难度,采用回溯+递归的方法穷尽所有的排列可能,让每一个数在每一个位置都出现一次。好了,这道题没啥好啰嗦的,祝大家刷题愉快,早日上岸!

http://www.hkea.cn/news/543924/

相关文章:

  • 王建设医生个人网站免费google账号注册入口
  • 免费自建手机网站搜索引擎优化的方法包括
  • 甘肃省建设工程安全质量监督管理局网站官网拉新项目官方一手平台
  • 做电影网站赚钱武汉新闻最新消息
  • 做网站没有成本的方法上海百度分公司电话
  • 寺庙网站建设百度ai人工智能
  • 完成公司网站建设下载关键词推广软件
  • wordpress如何关闭网站下载app
  • WordPress小程序二次修改石家庄seo排名外包
  • 做百度关键词网站厦门seo外包
  • 泉州seo-泉州网站建设公司谷歌关键词搜索工具
  • 组织部网站建设方案行业关键词分类
  • 上海黄浦 网站制作中国搜索引擎排名2021
  • 手机网站建设 cms营销技巧和营销方法
  • 平顶山做网站优化微博搜索引擎优化
  • 网站如何做品牌宣传海报每日舆情信息报送
  • 做论坛网站需要多大空间seo推广招聘
  • 中国建设银行网站软件不限次数观看视频的app
  • 网站开发建设的步骤win11优化大师
  • 在线做数据图的网站樱桃bt磁力天堂
  • 网站建设费的税率东莞公司网上推广
  • 上海设计公司排名前十宁波seo搜索优化费用
  • 如皋做网站公司com域名
  • 织梦做企业网站教程网络营销推广方案论文
  • 微信如何添加小程序二十条优化措施全文
  • 网站制作费可以做业务宣传费河北百度推广电话
  • wordpress日主题破解网站排名优化软件有哪些
  • 做公众号app 网站 app济南网站设计
  • 单位网站 单位网页 区别吗福州seo顾问
  • 专业做网站制作的公司百度地图网页版进入