日期:2014-05-20  浏览次数:20692 次

[急]有趣的数问题 能否用正则表达式解决?
我们把一个数称为有趣的,当且仅当:
1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。
2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。
3. 最高位数字不为0。
因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。
请计算恰好有n位的有趣的数的个数。由于答案可能非常大,只需要输出答案除以1000000007的余数。
输入格式
输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000)。 
输出格式
输出只有一行,包括恰好n 位的整数中有趣的数的个数除以1000000007的余数。 
样例输入
4
样例输出
3

请问这个能否用正则表达式解决?
------解决方案--------------------
这个正则,未免也太...
------解决方案--------------------
感觉有点像排列组合。。。
------解决方案--------------------
正则表达式是做模式匹配的,不是用来实现楼主的算法的。
模式匹配就是从一个字符串里找到指定规则的字符串。

楼主的算法,是要求出n位数字中所有的有趣数。

除非楼主想要用笨办法,逐个迭代出所有的情况,然后用正则进行模式匹配。
老实说,正则用在这个场景,效率是最低的,而且低得令人发指。

如果排列组合学得好的话,应该能从数学的角度列出 通项公式,然后,直接用BigDecimal求出结果,不是更干脆一些?