46. Permutations (list)

求一组不重复数的所有排列,用回溯法来遍历,不过这种回溯不需要回头。大概思路就是用一个递归函数,每次选择一个之前没选过的数加入到当前list中,最后如果选完了所有的数,加入到结果中。


算法并不难,主要是语法上遇到一些问题,比如关于list的使用。

总结:

1. list<list <Integer> > 这种二维的list,声明的时候还是和一维一样

results = new ArrayList<>();
2.将一个list加入到results中时,语法应该是

results.add(new ArrayList<>(v) );
3.list的remove操作,参数有对象和下标两种选择,如果要移除刚刚add进来的元素,可以写

v.remove(v.size() - 1);

完整代码:

import java.util.*;

class Solution {
	List<List<Integer> > results;
    public List<List<Integer> > permute(int[] nums) {
    	results = new ArrayList<>();
    	List<Integer> v = new ArrayList<Integer>();
        re(v, nums);
        return results;
    }
    public void re(List<Integer> v, int [] nums) {
    	if(v.size() == nums.length){results.add(new ArrayList<>(v) ); return ; }
    	for(int i : nums) {
    		if(!v.contains(i)) {
    			v.add(i);
    			re(v, nums);
    			v.remove(v.size() - 1);
    		}
    	}
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值