剑指 Offer 38. 字符串的排列
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
限制:
1 <= s 的长度 <= 8
dfs + set
class Solution { public: bool vis[8]; set<string> map; void dfs(string& s, int k, string str) { if(k == s.length()) { map.insert(str); return; } for(int i = 0; i < s.length(); i++) { if(vis[i]) continue; vis[i] = 1; dfs(s, k + 1, str + s[i]); vis[i] = 0; } } vector<string> permutation(string s) { vector<string> ret; memset(vis, 0, sizeof(vis)); dfs(s, 0, ""); for(set<string>::iterator it = map.begin(); it != map.end(); it++) { ret.push_back(*it); } return ret; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。