题解 | #牛牛的字符串排列#

牛牛的字符串排列

https://www.nowcoder.com/practice/5286dafdcdff4c9a9e92c7dc440143db

#include <any>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return string字符串vector
     */
    void swap(string& s, int a , int b){
        if (a == b) return;
        char temp = s[b];
        memcpy(&s[a+1], &s[a], sizeof(char)*(b-a));
        s[a] = temp;
        return;
    } 

    void rswap(string& s, int a , int b){
        if (a == b) return;
        char temp = s[a];
        memcpy(&s[a], &s[a+1], sizeof(char)*(b-a));
        s[b] = temp;
        return;
    } 

    void back(vector<string>& res, string& str, string& s, int k, int index){
        if (str.size() == s.size()){
            res.push_back(str);
            return;
        }
        for(int i = index; i < s.size(); ++i){
            // 第一次选择 选择第几个
            str.push_back(s[i]);
            swap(s, index, i);
            back(res, str, s, k, index+1);
            str.pop_back();
            rswap(s, index, i);
            if (res.size() == k) return;
        }
        return;
    } 

    vector<string> getPermutation(string s, int k) {
        // write code here
        vector<string> res;
        string str;
        sort(s.begin(), s.end());
        // cout << s;
        back(res, str, s, k, 0);
        return res;
    }
};

全部评论

相关推荐

运营3年修炼中接简历辅导:你的科研项目经历里,只写了你的动作,没有写你的思考和成果,不要只写使用什么进行了什么,这等于罗列你的任务,简历是为了突出你的优秀,你在什么样的任务背景下,克服了什么样的困难,针对性地做了哪些事情,最后达成了什么成果(用数据体现你的成果和效率)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务