题目
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。 他想用它们串成一圈作为手链,送给女朋友。 现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?
请你提交该整数。不要填写任何多余的内容或说明性的文字。
题解考点:全排列函数,STL——string
对这12颗珠子进行全排,对于每一种排列方式如果已经出现过,则不统计,如果之前没出现过,则统计下来。最后输出统计的个数。
注意几点:
- 见到环形,第一件事就是扩充为二倍表示;
- “虑手链可以随意转动或翻转”,说明逆序匹配和错位匹配都是可以的。逆序匹配就是如果
str
逆序后仍包含substr
,则也算是匹配;错位匹配就是一般的包含关系,如果str
中包含substr
则说明匹配; str.find(substr) != string::npos
的含义是判断str
中是否存在substr
,为真表示匹配成功,反之失败;(查找字符串a
是否包含子串b
,不是用strA.find(strB) > 0
而是strA.find(strB) != string:npos
).
用STL的函数写起来确实会轻松不少,否则还需要自己手写很多循环用于判断字符串的包含关系。
虽然时间复杂度大约在 12!
左右,但是要敢写,毕竟是个填空。
#include
using namespace std;
string str = "aaabbbbccccc";
vector v; // 如果枚举的某个手链不与v中的任何一个匹配,则将其变形后加入v
int main()
{
do {
int i = 0;
for (;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?