全排列的应用
亲7数
大致问题是:给定一些个位数如[1,1,2,0]这种,计算完全使用这些数字构成的数能整除7的个数
输入 1 1 2
输出 2
一开始想用next_permutation()直接秒的,后来测试不对,对于重复的元素排列组合,只会算是同一种情况
比如1 1 2的全排列应该是有
1 1 2
1 1 2
2 1 1
2 1 1
1 2 1
1 2 1
但是next_permutation()只有三种
1 1 2
2 1 1
1 2 1
所以只能自己写个DFS去搜索
class Solution { public: int cnt = 0; int vis[20], a[20]; void dfs(int* digit, int digitLen,int x) { if (x == digitLen) { int ans = 0; for (int i = 0; i < digitLen; i++) ans = ans * 10 + a[i]; if (ans % 7 == 0) cnt++; return; } for (int i = 0; i < digitLen; i++) { if (!vis[i]) { vis[i] = 1; a[x] = digit[i]; dfs(digit, digitLen, x + 1); vis[i] = 0; } } } int reletive_7(int* digit, int digitLen) { memset(vis, 0, sizeof(vis)); dfs(digit, digitLen, 0); return cnt; } };
等风起的那一天,我已准备好一切