< data.length()) {string tempString = "";//存储两个 , 中间的字符while (data[idx] != ',') {tempString += data[idx];++idx;}//若tempstring没有数据,则存入空,反之创建节点并存入if (tempString == "#") {myVector.push_back(nullptr);} else {int num = atoi(tempString.c_str());TreeNode *tempNode = new TreeNode(num);myVector.push_back(tempNode);}++idx;}//连接各个节点int pos = 1;for (int i = 0; i < myVector.size(); i++) {if (myVector[i] == nullptr) {continue;}myVector[i]->left = myVector[pos++];myVector[i]->right = myVector[pos++];}return myVector[0];}};// Your Codec object will be instantiated and called as such:// Codec codec;// codec.deserialize(codec.serialize(root));
这就是二叉树的创建和输出,哎嘘,要人命呢 。
剑指 Offer 38. 字符串的排列
//方法一:class Solution {public:vector> permutation(string s) {vector> myVector;sort(s.begin(), s.end());do {myVector.push_back(s);} while (next_permutation(s.begin() , s.end()));return myVector;}};//next_permutation是求当前排列的下一个排列,(按字典升序的下一个序列),如1234的next_permutation是1243,常用于全排列题目//返回值:如果有下一个序列就返回1,否则返回0//方法二:class Solution {public:vector> permutation(string s) {vector> myVector;dfs(myVector, s, 0);return myVector;}void dfs(vector>& myVector, string &s, int pos) {if (pos == s.size()) {myVector.push_back(s);}for (int i = pos; i < s.size(); i++) {int flag = 1;for (int j = pos; j < i; j++) { //字母相同时,等效,就不用再次交换加入vector了,去重,剪枝if (s[j] == s[i]) {flag = 0;}}if (flag) {swap(s[pos], s[i]);dfs(myVector, s, pos + 1);swap(s[pos], s[i]); //再交换回来}}}};
方法一:使用c++中的函数,直接存储所有序列 。
方法二:标准的深度优先搜索,做一下剪枝就好 。
剑指 Offer 39. 数组中出现次数超过一半的数字
//方法一:class Solution {public:int majorityElement(vector
方法一:哈希表,没啥说的,不用等遍历完了再判断,直接可以进行判断 。
方法二:排序,因为它的数量大于长度的一半,所以数组中间一定是该数 。
方法三:Boyer-Moore 投票算法 。
剑指 Offer 40. 最小的k个数
//方法一:class Solution {public:vector
- 《窥情》未删减版在哪儿在线观看
- android应用程序开发!在字节跳动我是如何当面试官的,威力加强版
- 初一上册数学 初一上册数学书电子版
- 最值得普通人学的编程语言是哪个?
- win10企业版ltsc密钥 win10企业版ltsc有录屏功能吗
- 造梦西游4好号和密码真的90级 造梦西游4好号和密码真的手机版
- iqooneo7竞速版屏幕尺寸
- 一九四二电影免费完整版在哪儿在线观看
- 偷窥课程完整版是什么电影
- 医用口罩和普通口罩有什么区别