关注
全排列,直到找到首尾想接的排列
优化:如果一个序列前面的部分不首尾想接,则后面不必计算
class Solution {
public:
bool endToEnd(vector<string> vstr) {
// write code here
bool flag = false; //标记是否成功
endToEnd(vstr, 0, flag);
return flag;
}
//交换任意两个字符串获取全排列,start:交换开始的下标
void endToEnd(vector<string> &vstr, int start, bool &flag)
{
int index = 0; //标记该序列首尾不相接开始的地方
if(judge(vstr, index))
{
flag = true;
return;
}
if(index < start) //序列前面的部分不首尾想接,则后面不必计算
return;
for(int i = start; i < vstr.size()-1 && !flag; ++i)
{
for(int j = i+1; j < vstr.size() && !flag; ++j)
{
swap(vstr[i], vstr[j]);
endToEnd(vstr, i+1, flag);
//交换回来,比如0,1交换后,下次需要0,2交换,0需要归位
swap(vstr[i], vstr[j]);
}
}
}
bool judge(vector<string> &vstr, int &index)
{
for(int i = 1; i < vstr.size(); ++i)
if(vstr[i-1].back() != vstr[i].front())
{
index = i;
return false;
}
return true;
}
};
查看原帖
点赞 评论
相关推荐
查看6道真题和解析 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 秋招开始捡漏了吗 #
11766次浏览 70人参与
# 今年秋招还有金九银十吗 #
16904次浏览 131人参与
# “vivo”个offer #
45830次浏览 310人参与
# 秋招,不懂就问 #
330463次浏览 1981人参与
# 辞职后的日常 #
15381次浏览 84人参与
# 上班后,才发现大学__白学了 #
1477次浏览 17人参与
# 满帮集团求职进展汇总 #
7784次浏览 71人参与
# 打工人的精神状态 #
100665次浏览 1308人参与
# 分享一个让你热爱工作的瞬间 #
43122次浏览 395人参与
# 上班到公司第一件事做什么? #
98549次浏览 681人参与
# 学历对求职的影响 #
550104次浏览 3903人参与
# 实习期间如何提升留用概率? #
189608次浏览 1606人参与
# 一人一个landing小技巧 #
127292次浏览 1462人参与
# 我和mentor的爱恨情仇 #
79083次浏览 434人参与
# 学历or实习经历,哪个更重要 #
192231次浏览 1026人参与
# 海信求职进展汇总 #
84795次浏览 408人参与
# 秋招结束之后的日子 #
99804次浏览 1011人参与
# 被同事甩锅了怎么办 #
25048次浏览 100人参与
# 数字马力求职进展汇总 #
211333次浏览 1670人参与
# 和mentor 1on1 都聊什么? #
3709次浏览 22人参与
# 你见过哪些工贼行为 #
31798次浏览 151人参与
