返回信息流这题自己解的话我也解了出来,用的回溯法,效率不高。看了看运行时间最少的代码
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
permute(nums, result, 0);
return result;
}
private void permute(int[] nums, List<List<Integer>> result, int start) {
if (start == nums.length - 1) {
result.add(asList(nums));
return;
}
for (int i = start; i < nums.length; i++) {
swap(nums, i, start);
permute(nums, result, start + 1);
swap(nums, i, start);
}
}
private static List<Integer> asList(int[] nums) {
List<Integer> list = new ArrayList<>(nums.length);
for (int num : nums) {
list.add(num);
}
return list;
}
private static void swap(int[] nums, int i, int j) {
if (i != j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
}
请问这算是递归还是啥呀?我咋理解不了这种代码呐
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #95952同步于 2018/5/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
leetcode Permutations
aq111po
2018/5/27镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
不是递归~ 交换相邻元素, 是有点难理解。但算是一个固定的套路
【 在 aq111po (happy) 的大作中提到: 】
: 这题自己解的话我也解了出来,用的回溯法,效率不高。看了看运行时间最少的代码
: class Solution {
: public List<List<Integer>> permute(int[] nums) {
: ...................