博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 46.全排列
阅读量:5298 次
发布时间:2019-06-14

本文共 1007 字,大约阅读时间需要 3 分钟。

题目:

给定一个没有重复数字的序列,返回其所有可能的全排列。

分析:

题目给的很简单,首先这个序列是一个没有重复数字的序列,所以并不需要担心你排列出来的数字是否会有不同位置有相同数字的情况,这就减少了很多结果,避免了计算量。

并且由于不是选择最优解的题目,所以一定是用深度搜索将所有的情况全部都找出。

代码:

1 class Solution { 2     public List
> all=new ArrayList(); 3 public List list=new ArrayList(); 4 public List
> permute(int[] nums) { 5 boolean[] is=new boolean[nums.length]; 6 search(nums,is,0); 7 return all; 8 } 9 public void search(int[] nums,boolean[] is,int total) {10 if(total==nums.length) {11 List ls=new ArrayList(list);12 all.add(ls);13 return;14 }15 for(int n=0;n

我定义了一个boolean数组,每当这个数字被选择过,将其设定为true,这样不但可以避免找出的结果中会有重复数字的情况,而且还可以确保程序在一定时间结束,而不是无限循环下去。

在保存List数据的的代码处可以看到我重新声明了一个List ls来储存list列表的数据,原因很简单,因为列表中的数据在你保存到all集合中,如果对保存的列表进行更改,那么all集合中的列表也是随之变化的,也就是可以把它储存的数据看作是一个指向性的地址,而不是确定性的数据,这一点还请注意。

代码没有优化,6ms,速度上并不是很快。

 

转载于:https://www.cnblogs.com/CHAHA123/p/10607669.html

你可能感兴趣的文章
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
使用gitbash来链接mysql
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
虚拟DOM
查看>>
uva 11468 Substring
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
BootStrap2学习日记2--将固定布局换成响应式布局
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
数据库的高级查询
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>