既有适合小白学习的零基础资料,也有适合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)**