一亩三分地

 找回密码 注册账号

扫描二维码登录本站

BBS
Offer多多
Salarytics
交友
Learn
Who's Hiring?
疫情动态
指尖新闻
Instant
客户端
微信公众号
扫码关注公众号
留学申请公众号
扫码关注留学申请公众号
Youtube频道
留学博客
关于我们
查看: 863|回复: 10
收起左侧

[树/链表/图] 加米,求帮忙看篮子王LC46的IndexOutOfBoundException

[复制链接] |只看干货 |刷题, 树/链表/图
我的人缘0

升级   1.57%


分享帖子到朋友圈
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (65)
 
 
0% (0)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
大家好,看了篮子王的Lc46视频解析,可是运行他的solution有一个IndexOutOfBoundException。 可以帮我看看问题出在哪里吗?这种问题应该如何debug呢?写一个main函数debug跑一遍吗? 谢谢大家,会尽力加米。

-------问题------------
Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]
Output:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]


--------solution-----------------------

[Bash shell] 纯文本查看 复制代码
public class Solution {
	public List<List<Integer>> permute(int[] nums) {
		LinkedList<List<Integer>> res = new LinkedList<List<Integer>>();
		if (nums == null || nums.length == 0) return res;
		permuteHelper(res, new LinkedList<Integer>(), nums, new HashSet<Integer>());
		return res;
	}
	public void permuteHelper(List<List<Integer>> res, List<Integer> clist, int[] nums, HashSet<Integer> set) {
		if (clist.size() == nums.length) res.add(new LinkedList<Integer>(clist));
		else {
			for (int i = 0 ; i < nums.length; i++) {
				if (!set.contains(nums[i])) {
					int last = clist.size() - 1;
					clist.add(nums[i]);
					set.add(nums[i]);
					permuteHelper(res, clist, nums, set);
					set.remove(nums[i]);
					clist.remove(last);
				}
			}
		}
	}
}

上一篇:轉讓leetcode premium帳號
下一篇:[脑洞] 找硬币Greedy是否可解
我的人缘0

升级   1.57%

 楼主| 超人96825 2019-12-7 08:35:40 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (65)
 
 
0% (0)    👎
这并不是最优解,还是想知道compile问题出在哪里了;谢谢。 基本思路就是先选中一个数,再从剩下的数里选一个加入到clist里,直到clist的size为nums.length,此时找到一个permutation并加入到result里;hashset的作用就是筛选出未被加入clist的数。
回复

使用道具 举报

我的人缘0

升级   97.14%

dreamy 2019-12-7 08:40:11 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (57)
 
 
1% (1)    👎
13 和 14 换一下? 要删的是加进去的那个最后的元素

评分

参与人数 1大米 +1 收起 理由
超人96825 + 1 谢谢,现在明白了!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   2%

337845818 2019-12-8 01:31:32 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   81% (792)
 
 
18% (176)    👎
clist 为空时, 考虑一下

评分

参与人数 1大米 +1 收起 理由
超人96825 + 1 谢谢,现在明白了!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   9.71%

菊二二二二 2019-12-8 03:47:37 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (72)
 
 
0% (0)    👎
同上,等于说把倒数第二个删掉了

评分

参与人数 1大米 +1 收起 理由
超人96825 + 1 谢谢,现在明白了!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   46.43%

yekangxuan 2019-12-8 05:33:49 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (12)
 
 
0% (0)    👎
同上,remove的index不对,加进去之后再取 .size() - 1 remove掉最后一个

评分

参与人数 1大米 +1 收起 理由
超人96825 + 1 谢谢,现在明白了!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   21.28%

WarriorZ 2019-12-8 05:34:50 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   96% (1572)
 
 
3% (50)    👎
超人96825 发表于 2019-12-7 08:35
这并不是最优解,还是想知道compile问题出在哪里了;谢谢。 基本思路就是先选中一个数,再从剩下的数里选一 ...

求permutation还有比N!更优的解法吗?能给个链接看一下吗?
回复

使用道具 举报

我的人缘0

升级   77%

JYJYY 2019-12-8 10:48:01 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎
先往list里面add数,然后再last=list.size()-1,删掉的才会是最后一个数

评分

参与人数 1大米 +1 收起 理由
超人96825 + 1 谢谢,现在明白了!

查看全部评分

回复

使用道具 举报

我的人缘0

升级   1.57%

 楼主| 超人96825 2019-12-9 01:28:50 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (65)
 
 
0% (0)    👎
JYJYY 发表于 2019-12-8 10:48
先往list里面add数,然后再last=list.size()-1,删掉的才会是最后一个数
谢谢,现在明白了!
回复

使用道具 举报

我的人缘0

升级   1.57%

 楼主| 超人96825 2019-12-9 01:29:10 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (65)
 
 
0% (0)    👎
yekangxuan 发表于 2019-12-8 05:33
同上,remove的index不对,加进去之后再取 .size() - 1 remove掉最后一个
谢谢,现在明白了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表