最新【算法】剑指 Offer II 083(2),2024年最新跟我一起手写EventBus吧

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

	backtrack(nums, 0, ans);
	return ans;
}

private void backtrack(int[] nums, int cur, List<List<Integer>> ans) {
	if (cur == nums.length) {
		ans.add(Arrays.stream(nums).boxed().collect(Collectors.toList()));
		return;
	}
	// 当前位置保持不变,接着排下一个
	backtrack(nums, cur + 1, ans);
	// 换后面的某一个到当前位置
	for (int i = cur + 1; i < nums.length; ++i) {
		swap(nums, cur, i);
		backtrack(nums, cur + 1, ans);
		swap(nums, cur, i);
	}
}

private void swap(int[] nums, int a, int b) {
	nums[a] ^= nums[b];
	nums[b] ^= nums[a];
	nums[a] ^= nums[b];
}

}




---


### c



/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){
*returnSize = numsSize;
for (int i = 2; i < numsSize; ++i) {
*returnSize *= i;
}

int \*\*ans = (int \*\*) malloc(sizeof(int \*) \* (\*returnSize));
\*returnColumnSizes = (int \*) malloc(sizeof(int) \* (\*returnSize));
for (int i = 0; i < \*returnSize; ++i) {
    ans[i] = (int \*) malloc(sizeof(int) \* numsSize);
    (\*returnColumnSizes)[i] = numsSize;
}

int ansSize = 0;

backtrack(nums, numsSize, 0, ans, &ansSize);

return ans;

}

void backtrack(int* nums, int numsSize, int cur, int **ans, int *ansSize) {
if (cur == numsSize) {
for (int i = 0; i < numsSize; ++i) {
ans[*ansSize][i] = nums[i];
}
*ansSize += 1;
return;
}
// 当前位置保持不变,接着排下一个
backtrack(nums, numsSize, cur + 1, ans, ansSize);
// 换后面的某一个到当前位置
for (int i = cur + 1; i < numsSize; ++i) {
swap(nums, cur, i);
backtrack(nums, numsSize, cur + 1, ans, ansSize);
swap(nums, cur, i);
}
}

void swap(int* nums, int a, int b) {
nums[a] ^= nums[b];
nums[b] ^= nums[a];
nums[a] ^= nums[b];
}




---


### c++



class Solution {
private:
void backtrack(vector &nums, int cur, vector<vector> &ans) {
if (cur == nums.size()) {
ans.push_back(nums);
return;
}
// 当前位置保持不变,接着排下一个
backtrack(nums, cur + 1, ans);
// 换后面的某一个到当前位置
for (int i = cur + 1; i < nums.size(); ++i) {
swap(nums[cur], nums[i]);
backtrack(nums, cur + 1, ans);
swap(nums[cur], nums[i]);
}
}
public:
vector<vector> permute(vector& nums) {
vector<vector> ans;

    backtrack(nums, 0, ans);

    return ans;
}

};




---


### python



class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
n = len(nums)
ans = []

    def backtrack(cur: int) -> None:
        if cur == n:
            ans.append(nums[:])
            return
        # 当前位置保持不变,接着排下一个
        backtrack(cur + 1)
        # 换后面的某一个到当前位置
        for i in range(cur + 1, n):
            nums[cur], nums[i] = nums[i], nums[cur]
            backtrack(cur + 1)
            nums[cur], nums[i] = nums[i], nums[cur]

    backtrack(0)
    return ans



---


### go



func permute(nums []int) [][]int {
n := len(nums)
var ans [][]int

var backtrack func(cur int)
backtrack = func(cur int) {
	if cur == n {
		ans = append(ans, append([]int{}, nums...))
		return
	}
	// 当前位置保持不变,接着排下一个
	backtrack(cur + 1)
	// 换后面的某一个到当前位置
	for i := cur + 1; i < n; i++ {
		nums[cur], nums[i] = nums[i], nums[cur]
		backtrack(cur + 1)
		nums[cur], nums[i] = nums[i], nums[cur]
	}
}

backtrack(0)

return ans

}




---


### rust



impl Solution {
pub fn permute(mut nums: Vec) -> Vec<Vec> {
let mut ans = Vec::new();

    Solution::backtrack(&mut nums, 0, &mut ans);

    ans
}

fn backtrack(nums: &mut Vec<i32>, cur: usize, ans: &mut Vec<Vec<i32>>) {
    if cur == nums.len() {
        ans.push(nums.clone());
        return;
    }
    // 当前位置保持不变,接着排下一个
    Solution::backtrack(nums, cur + 1, ans);
    // 换后面的某一个到当前位置
    (cur + 1..nums.len()).for\_each(|i| {
        nums.swap(cur, i);
        Solution::backtrack(nums, cur + 1, ans);
        nums.swap(cur, i);
    });
}

}




---


![在这里插入图片描述](https://img-blog.csdnimg.cn/766e195f8667408ebd704162e275c058.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LqM5b2T5a6255qE55m95bi95a2Q,size_7,color_FFFFFF,t_70,g_se,x_16)




---


## [原题传送门:https://leetcode-cn.com/problems/VvJkup/](https://bbs.csdn.net/topics/618658159)


## [原题传送门:https://leetcode-cn.com/problems/permutations/](https://bbs.csdn.net/topics/618658159)




---





![img](https://img-blog.csdnimg.cn/img_convert/ca26e9dd224f08653c4957984a9e66cd.png)
![img](https://img-blog.csdnimg.cn/img_convert/481f4ff03221735b7cb0b57777b55106.png)
![img](https://img-blog.csdnimg.cn/img_convert/5754e9f7447e39d6f448e710730edb61.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

g-JjGreflu-1715574683222)]
[外链图片转存中...(img-oFK0Xhzj-1715574683222)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值