zoukankan      html  css  js  c++  java
  • 排列组合之组合问题 网易深度学习工程师面试题 C++ 使用10方法

    #include <iostream>
    #include <vector>
    #include <cstdio>
    
    #define UL unsigned long int
    
    using namespace std;
    
    
    // 后r个全是1的时候终止
    bool hasDone(vector<int>& index, int r){
        for(auto i=index.size()-r; i < index.size(); i++){
            if(index[i] == 0) return false;
        }
        return true;
    }
    
    
    vector<int> combination_justk(int n, int r, int k){
        vector<int> index((UL)n, 0);
        // 设置初始index, 前k个设置为1, 即r个1, n-r个0
        for(int i=0;i<r;i++){
            index[i] = 1;
        }
        // 记录初始组合
        while(!hasDone(index, r)){
            k--;
            for(int i=0;i<index.size()-1;i++){
                // 找到10的时候,交换10变成01
                if(index[i] == 1 && index[i+1] == 0){
                    index[i] = 0;
                    index[i+1] = 1;
                    // 将i左边的序列恢复成最小的状态,即前面是1后面是0
                    int left_one_num=0;
                    for(int j=0;j<i;j++){
                        if(index[j] == 1){
                            index[j] = 0;
                            index[left_one_num++] = 1;
                        }
                    }
                    if(k-1==0){
                        return index;
                    }
                    else{
                        break;
                    }
                }
            }
        }
        return {};
    }
    
    void netease_test(int n, int m, int k){
        if(n<=0 || m<=0 || k<=0) return;
        auto index = combination_justk(n+m, n, k);
        for(auto i:index){
            if(i==1){
                cout << 'a';
            }
            else{
                cout << 'z';
            }
        }
        cout << endl;
    }
    
    int main(int argc, char* argv[])
    {
        netease_test(2, 2, 6);// zzaa
        return 0;
    }
    
  • 相关阅读:
    负载均衡算法实现方式
    TCP三次握手和四次挥手
    深度解析Java内存原型
    缓存击穿、缓存穿透和缓存雪崩
    uni-app分包加载
    vuex的使用
    在web中打开exe程序并传参
    Vue 中引用高德地图
    .Net Core 从MySql数据库生成实体类 Entity Model
    vs2017 创建项目推送到Git上
  • 原文地址:https://www.cnblogs.com/theodoric008/p/9461106.html
Copyright © 2011-2022 走看看