关注
全排列,直到找到首尾想接的排列
优化:如果一个序列前面的部分不首尾想接,则后面不必计算
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;
}
};
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习生的蛐蛐区 #
45956次浏览 356人参与
# 夸夸我的求职搭子 #
199779次浏览 1917人参与
# 你认为小厂实习有用吗? #
16825次浏览 211人参与
# 三一重工求职进展汇总 #
12990次浏览 60人参与
# 应届生,你找到工作了吗 #
19337次浏览 144人参与
# 硬件应届生薪资是否普遍偏低? #
75043次浏览 518人参与
# 说说你知道的学历厂 #
32087次浏览 189人参与
# 计算机有哪些岗位值得去? #
14852次浏览 142人参与
# 下班后的时间你怎么安排 #
8798次浏览 129人参与
# 材料人,你们签了哪个公司 #
7164次浏览 17人参与
# 你找工作的时候用AI吗? #
16319次浏览 206人参与
# 面试尴尬现场 #
27645次浏览 185人参与
# 哪一瞬间觉得自己长大了 #
8105次浏览 183人参与
# 在职场上,你最讨厌什么样的同事 #
14887次浏览 151人参与
# 社会教会你的第一课 #
32063次浏览 420人参与
# 中核求职进展汇总 #
20477次浏览 152人参与
# 电网笔面经互助 #
36502次浏览 354人参与
# 简历当中有水分算不算造假? #
25839次浏览 380人参与
# 神州信息工作体验 #
16389次浏览 75人参与
# 学历贬值真的很严重吗? #
22250次浏览 162人参与