Permutations

使用递归的方式,逐步将后一个数字填充进去,所以第n个数字填充时有n个位置可放。注意在跳出低估的时候,要恢复之前的状态。

    void fill(vector<vector<int> > &result, vector<int> &tmp, vector<int> &num, int step, int total){
        if(step > total){
            result.push_back(tmp);
            return;
        }
        int i, l = tmp.size();
        for(i=0; i<step; i++){
            tmp.insert(tmp.begin()+i, num[step-1]);
            fill(result, tmp, num, step+1, total);
            tmp.erase(tmp.begin()+i);
        }
    }
    vector<vector<int> > permute(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > result;
        vector<int> tmp;
        tmp.reserve(1000);
        tmp.clear();
        fill(result, tmp, num, 1, num.size());
        return result;
    }
原文地址:https://www.cnblogs.com/waruzhi/p/3347732.html