当前位置: 首页 > news >正文

【LeetCode】剑指 Offer(20)

目录

题目:剑指 Offer 38. 字符串的排列 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 38. 字符串的排列 - 力扣(Leetcode)

题目的接口:

class Solution {
public:vector<string> permutation(string s) {}
};

解题思路:

知道题用到的是回溯的思想,

但是我之前没有做过回溯的题目,

所以可能在理解上有一点不太到位,请见谅:

我的思路是使用一个string来模拟每种情况,然后push进一个数组;

建一个类型是bool的数组用来判断字符串中的字符使用情况(哪个用了,哪个没用);

为了更好的剪枝(删除重复情况),用排序将将相同的字母连在一起,

开始回溯:

如果情况成立,就push进数组;

通过循环遍历(以每个字符开始,有不同情况)

如果出现:同一层两个字符相等,且上一个字符用之前过,证明重复了(剪枝)

最后回溯完返回即可。

代码:

class Solution {
public://这是要返回的数组vector<string> res;vector<string> permutation(string s) {//判断字符串为空的情况if(s.size() == 0)   {return {};}//建一个string用来接收每种情况string tmp;//用这个数组来判断该位置有无字符(并初识化)vector<bool> used(s.size());//排序,将相同的字母连在一起sort(s.begin(), s.end());//回溯backtrack(s, tmp, used);//返回return res;}
private:void backtrack(string s, string& tmp, vector<bool>& used){//一种情况成立,push进resif(s.size() == tmp.size()){res.push_back(tmp);return;}//循环遍历每一个位置的每一种情况for(int i = 0; i < s.size(); i++){//如果该位置有字符了,就不进去,让i继续++if(!used[i]){//如果字符串s出现同一层两个字符相等,且上一个字符用之前过,证明重复了if(i >= 1 && s[i - 1] == s[i] && !used[i - 1]){continue;}//插入tmp.push_back(s[i]);//表示这个位置已经有字符了used[i] = true;//继续回溯backtrack(s, tmp, used);//返回上一层tmp.pop_back();//表示这个位置没有字符了(这样就能继续往tmp里面插入字符)used[i] = false;}}}
};

有很多题目思路很复杂,不可能只靠写一道题目就学会,

需要多去刷一些同类型的题目,才能更好的学习。

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

http://www.lryc.cn/news/36631.html

相关文章:

  • FutureTask中的outcome字段是如何保证可见性的?
  • 直播回顾 | 聚焦科技自立自强,Bonree ONE 助力国产办公自动化平稳替代
  • 深入理解Linux进程
  • Vue3之组件间的双向绑定
  • Java语法基础(一)
  • 优思学院|零质量控制是什么概念?
  • 2023-03-09 CMU15445-Query Execution
  • vuedraggable的使用
  • 双馈风力发电机-900V直流混合储能并网系统MATLAB仿真
  • leader选举过程
  • 建造者模式
  • IO与NIO区别
  • 无监督循环一致生成式对抗网络:PAN-Sharpening
  • ArrayList源码分析(JDK17)
  • 数字IC/FPGA面试笔试准备(自用待填坑)
  • 基于多任务融合的圣女果采摘识别算法研究
  • 又一个开源第一!飞桨联合百舸,Stable Diffusion推理速度遥遥领先
  • 数据链路层及交换机工作原理
  • VSCode 开发配置,一文搞定(持续更新中...)
  • 全网最详细的(CentOS7)MySQL安装
  • 基于LSTM的文本情感分析(Keras版)
  • 2023年全国最新机动车签字授权人精选真题及答案17
  • PowerShell远程代码执行漏洞(CVE-2022-41076)分析与复现
  • Mybatis中的一级缓存和二级缓存
  • 【Java】SpringBoot中实现异步编程
  • ASCII 文件与 TIFF 文件互转(Python 实现)(2023/03/09)
  • 思科模拟器 | 交换机与路由器的配置汇总【收藏备用】
  • 电子台账:软件运行环境要求与功能特点
  • 计算机科学导论笔记(六)
  • 嵌入式从业10年,聊聊我对工业互联网和消费物联网的看法 | 文末赠书4本