题目描述
给一个数字串 (长度不超过 ,可能含重复数字)。把 的每个字符当作一张卡片,问这叠卡片能拼出多少种互不相同的排列?
思路:先把整串 sort 成最小排列,再用 do-while 循环配合 next_permutation 一个一个枚举、计数。next_permutation 遇到重复字符会自动跳过相同的排列,数出来的就是不同排列的个数;而不从最小排列出发,排在输入串前面的那些排列会被整个漏掉。
输入格式
一行一个字符串 (,只含数字字符)。
输出格式
一行一个整数:不同排列的个数。
样例
输入:
112
输出:
3
1、1、2 三张卡片能拼出 112、121、211 三种;两个 1 交换先后不算新排列。
数据范围
,只含数字字符。提示:do { ... } while (next_permutation(...)) 的循环体至少执行一次——但前提是出发点已经是最小排列;最长 个字符最多 种,直接数就行。