indeed 最后一题求解

给定一个字符串,每个字符串可以用0-9或者?来表示。现在要求将所有?填充成数字。
要求:
每个长度小于等于10的子串中,所有的数字都不能重复。
问一共有多少种满足要求的填充方法。

ps:可能我没说清楚。
输入:
1????????9?????????4?
输出:
0
大概是这样,问号的个数我记不清了。
全部评论
哎呀,看了讨论,豁然开朗啊。还是自己太水了
点赞 回复 分享
发布于 2016-10-23 22:48
最后三个测试用例没通过,还没找到原因
点赞 回复 分享
发布于 2016-10-22 21:58
符合要求的数其实就是个无限循环的数(循环部分长度为10)。如果长度小于10,就是全排列。大于10,前面十个作为子串,开始遍历后面的字符串,遍历到的是问号则跳过,如果是数字,有两种可能:如果与子串里对应位置的数字冲突,那么就不符合要求,排列数是0;如果子串里对应的位置是问号,就更新子串。最后输出子串的全排列可能即可。
点赞 回复 分享
发布于 2016-10-22 21:42
状态压缩动态规划,f[i][j]表示处理到第i个字符i-9到i这十个字符中0~9的出现情况,如j=512表示9出现过了其他的没出现过,然后按题意转移就好了,复杂度是1024*n
点赞 回复 分享
发布于 2016-10-22 21:26
只需要统计前10个字符里有多少种可能
点赞 回复 分享
发布于 2016-10-22 21:21

相关推荐

02-10 13:41
西南大学 Java
牛客12789347...:你们这28届的干啥呀,大学玩舒服了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务