Leetcode 46. 全排列
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情。
❤️欢迎订阅java厂长《LeetCode每日一题》 ❤️
1、题目📑
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
实例1:
输入: nums = [1,2,3]
输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
实例2:
输入: nums = [0,1]
输出: [[0,1],[1,0]]
实例3:
输入: nums = [1]
输出: [[1]]
提示:
1 <= nums.length <= 6-10 <= nums[i] <= 10nums中的所有整数 互不相同
2、思路🧠
方法一:字符串模拟
待更新!!
废话少说~~~~~上代码!
3、代码👨💻
第一次commit AC
class Solution {
public String countAndSay(int n) {
if(n == 1) return "1";
String num = countAndSay(n - 1);
StringBuffer sb = new StringBuffer();
for (int i = 0; i <= num.length() - 1; i++) {
int count = 1;
while(i < num.length() - 1 && num.charAt(i) == num.charAt(i + 1)) {
count++;
i++;
}
sb.append(count);
sb.append(num.charAt(i));
}
return sb.toString();
}
}
时间复杂度:O(N2)
空间复杂度:O(N)
第二次commit AC
class Solution {
public String countAndSay(int n) {
if(n == 1) return "1";
String num = countAndSay(n - 1);
StringBuffer sb = new StringBuffer();
int i = 0, j = 1, len = num.length();
while(j < len) {
if (num.charAt(i) != num.charAt(j)) {
sb.append(j - i).append(num.charAt(i));
i = j;
}
j++;
}
sb.append(j - i).append(num.charAt(i));
return sb.toString();
}
}
4、总结
该题目的对思维的分析与探讨,对于题目的解读能力是非常关键的,在力扣的刷题过程中,字符串的问题还是比较多的,在解决字符串的问题要灵活分析应用合适的方法进行拆解并提交。
❤️来自专栏《LeetCode基础算法题》欢迎订阅❤️
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!