首页 > 编程语言 >leetcode 面试题08.08 有重复字符串的排列组合 C/C++ 排序 + 深度优先搜索(分支限界)

leetcode 面试题08.08 有重复字符串的排列组合 C/C++ 排序 + 深度优先搜索(分支限界)

时间:2022-09-04 01:22:29浏览次数:77  
标签:sort 面试题 used cur retVec 08.08 vector posVec 限界

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
class Solution {
public:
vector<string> permutation(string S) {
sort(S.begin(),S.end());
vector<string> retVec;
vector<int> used_posVec(S.size());
string cur_S;
recursive(retVec,S,cur_S,1,used_posVec);
return retVec;
}
/** 采用深度优先搜索 + 分支限界的方式****/
void recursive(vector<string> &retVec, string &sort_S,string &cur_S,int cur_index,vector<int> &used_posVec){
if(cur_index == sort_S.size()) //递归叶子节点,递归终止
{
//查看当前还有哪个字符没有被使用
for(int i = 0;i < used_posVec.size();i++)
if(!used_posVec[i]) {
cur_S.push_back(sort_S.at(i));
retVec.push_back(cur_S); //诞生一种新的情况
cur_S.pop_back();
}
}else{
char last_try_char = 0; // 上一个被当前位置使用的字符是什么
for(int i = 0;i < used_posVec.size();i++){
cur_S.push_back(sort_S.at(i));
if(!used_posVec[i] && last_try_char != sort_S.at(i)) // 该字符在这个位置没有被使用,并且不等于上一个在该位置尝试过的字符
{
used_posVec[i] = 1;
recursive(retVec,sort_S,cur_S,cur_index+1,used_posVec);
used_posVec[i] = 0;
last_try_char = sort_S.at(i);
}
cur_S.pop_back();
}
}
}
};
int main(){
Solution s;
vector<string> retVec = s.permutation("abccc");
for(auto it = retVec.begin();it!=retVec.end();it++){
cout<<*it<<endl;
}
return 1;
}

标签:sort,面试题,used,cur,retVec,08.08,vector,posVec,限界
From: https://www.cnblogs.com/daniel123/p/16654128.html

相关文章

  • 献芹奏曝-Python面试题-算法-链表篇
    上一篇:献芹奏曝-Python面试题    开篇的话:本文目的是收集和归纳力扣上的算法题,希望用python语言,竭我所能做到思路最清奇、代码最简洁、方法最广泛、性能最高效,了解......
  • Elasticsearch 面试题
    Elasticsearch面试题为什么要使用Elasticsearch?系统中的数据,随着业务的发展,时间的推移,将会非常多,而业务中往往采用模糊查询进行数据的搜索,而模糊查询会导致查询引擎......
  • 前端面试题 JavaScript 基础 —— 2022-09-03
    每日3题13以下代码执行后,控制台中的输出内容为?Object.prototype.a=1;Function.prototype.b=2;functionF(){}varf=newF();console.log(F.a);console.lo......
  • redis面试题
    Rdeis面试42问(qq.com)1.简单介绍一下Redis呗!2.分布式缓存常见的技术选型方案有哪些?3.说一下Redis和Memcached的区别和共同点4.缓存数据的处理流程是怎样的?5.......
  • golang面试题
    面试题1:2.代码效率分析,考察局部性原理3.多核CPU场景下,cache如何保持一致、不冲突?4.uint类型溢出5.介绍rune类型6.编程题:3个函数分别打印cat、dog、fish,要求每个函数......
  • 面试题2
    1、GMP2、sql索引失效原因3、Redis实现(布隆过滤器)、缺点4、Redis淘汰机制,持久化机制5、消息队列,消费机制,消息堆积6、Tcp工作原理,粘包问题处理,和UDP区别7、Https和H......
  • 前端面试题每日3题——2022-09-02
    每日3题10以下代码执行后,控制台中的输出内容为?varobj={a:1,};((obj)=>{console.log(obj.a);obj.a=3;varobj={a:2,};console.l......
  • 【面试题】Vue路由跳转的四种方式用法及区别
    Vue路由跳转的四种方式用法及区别点击打开视频讲解更加详细一、router-link<router-link:to="{name:'home'}"><router-link:to="{path:'/home'}">//name,path都行......
  • 计算机网络常见面试题
    1.计算机网络体系架构七层网络体系结构:OSI模型把网络通信的工作分为7层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。五层网络体系......
  • 【Java面试】面试如何让面试官面的很爽,看完这道面试题,finally块一定会执行吗?
    “finally块一定会执行吗?”这是最近一个工作3年的小伙伴去面试的时候遇到的问题。你遇到这个问题会怎么回答呢?大家好,我是Mic,一个工作了14年的Java程序员对于这个问题,......