创建一个boolean数组去记录数组中每个数字的使用情况。
dfs的入参:最终结果,当前结果,原数组,数组boolean值。
如果当前结果长度等于数组长度记录结果。
否则遍历数组boolean值从第一个位置开始遍历,如果是false说明没有使用过,那么将这个参数存入当前数组的同时将布尔值改变成false,然后进行下一次dfs。
最后需要弹出该位置的参数,因为这个参数可以由其他参数替代。

https://leetcode.com/problems/permutations/description/
题意
[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]
]
分析
1.要判断某个数字之前是否使用过,那么就必须
代码
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> item = new ArrayList<Integer>();
if(nums.length==0||nums==null)
return res;
boolean[] visited = new boolean[nums.length];  
dfs(res,item,nums,visited);
return res;
}
public void dfs(List<List<Integer>> res,List<Integer> temp,int[] nums,boolean[] visited) {
//dfs终止条件
if (temp.size() == nums.length) {
res.add(new ArrayList(temp));
}
//首先这种dfs的遍历不是从某个pos的位置开始遍历,而是从头开始遍历的,因为可能前面的参数没有用过
//否则就继续下一个层,也就是添加一个数字到temp里面去
//也是从头开始遍历哪个数字用没用过,没用过就添加进去
for (int i=0;i<nums.length;i++){
if(visited[i] == false){
temp.add(nums[i]);
visited[i] = true;
dfs(res,temp,nums,visited);
temp.remove(temp.size() - 1);
visited[i] = false;
}
}
}
}

转载于:https://www.cnblogs.com/buptyuhanwen/p/8985899.html

leecode---46---数组,dfs---求出数组的所有组合相关推荐

  1. C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中

    1. 题目 请编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中.二 ...

  2. C语言试题二十二之定义了3×3的二维数组,并在主函数中赋值。函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。

    1. 题目 定义了3×3的二维数组,并在主函数中赋值.函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试 ...

  3. 求出数组中元素的总和_数组中所有元素的总和可被给定数K整除

    求出数组中元素的总和 This program will help to find out the sum of elements in an array which is divisible by ...

  4. C语言编程>第二十周 ② 下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调、次最大数和b[1]中的数对调。

    例题:下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调.次最大数和b[1]中的数对调. 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构. ...

  5. 13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

    13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中.二维数组中的数已在主函数中 ...

  6. 调用方法求出数组两个元素的和

    有如下数组int[] arr={10,20}; 定义一个方法求两个数字的和(方法参数为两个int类型),使用这个方法求出数组这两个元素相加的结果并打印 package com.it;import ja ...

  7. Description 给出一个N*N的二维数组,求出其中的最大数和其所在的行号、列号(均从0开始计算)。 Input 第1行是一个正整数N(2≤N≤10),表示二维数组的大小。后跟N行,每行N个数。

    /*Description 给出一个N*N的二维数组,求出其中的最大数和其所在的行号.列号(均从0开始计算). Input 第1行是一个正整数N(2≤N≤10),表示二维数组的大小.后跟N行,每行N个 ...

  8. python课程设计矩阵对角线之和_Python二维数组实现求出3*3矩阵对角线元素的和示例...

    Python二维数组实现求出3*3矩阵对角线元素的和示例 题目:求一个3*3矩阵对角线元素之和. 程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出. def two_dime ...

  9. C语言编程>第七周 ⑧ 请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中。

    例题:请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中.二维数组中的数己在主函数中赋予. ...

  10. 7.请编写一个函数int fun(int*s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

    7.请编写一个函数int fun(int*s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中. 例如,输入如下整数:876 675 896 101 301 ...

最新文章

  1. 八种简易健康减肥瘦身法
  2. “大型票务系统”和“实物电商系统”的数据库选型
  3. rails 3 使用 cucumber 和rspec 進行 測試
  4. tem在c语言中的作用,Temtem状态有什么效果 Temtem各状态效果介绍_游侠网
  5. Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
  6. 3分钟,看回归分析模型怎么做
  7. sqlserver导入向导时提示外部表不是预期格式_Excel办公实操,导入本地数据,创建参数查询,就是简单...
  8. loadRunner安装及使用步骤
  9. 个人觉的不错的文章[来自CSDN]
  10. 167. Two Sum II - Input array is sorted (C, C++, Python)
  11. 1694 件 AI 事件大盘点,哪些事让你记忆深刻?
  12. SpringMVC的json数据交互
  13. redis和sqlserver数据同步_redis缓存和mysql数据库同步
  14. 利用集合类排序JAVA_Java使用Collections工具类对List集合进行排序
  15. 10个免费的web压力测试工具
  16. centos查看yum上jdk的版本
  17. 安装ubuntu系统,保留原始分区数据
  18. Selenium使用自带浏览器自动化
  19. html导航栏前面有图片,CSS带图片的漂亮导航菜单
  20. php识别名片,基于php的聚合数据名片识别api调用实例

热门文章

  1. 不能摸鱼的工作不是好工作?
  2. 用于EAM的SAP PM移动应用程序
  3. 作为一个部门经理,该如何带好下属?
  4. AI时代人类需要具备的九种软技能,你get了几个?
  5. 何恺明团队最新力作:超越EfficientNet,GPU上提速5倍|CVPR 2020
  6. SAP MM MB5L 报表里的差异金额如何调整?
  7. 真正的人工智能至少还要几百年才能实现,你信吗?
  8. 关于人工智能中强化学习的扫盲
  9. 深度研报:六大视角解读人工智能,AI岂止于技术
  10. 深度丨走向人工智能时代,百度的延承和蜕变