全排列的应用

亲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;
    }
};

 

posted @ 2020-08-01 20:58  知道了呀~  阅读(395)  评论(0编辑  收藏  举报