標籤:== -- iostream fine def 交換 網易 面試題 bin
#include <iostream>#include <vector>#include <cstdio>#define UL unsigned long intusing 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;}
排列組合之組合問題 網易深度學習工程師面試題 C++ 使用10方法