1.把数组排成最小的数
思路:定义一个新的排序规则。
class Solution { public: string PrintMinNumber(vector<int> numbers) { /*对vector容器内的数据进行排序,按照将a和b转为string后 若a+b<b+a a排在在前的规则排序, 如 2 21 因为 212 < 221 所以排序后为 21 2 to_string() 可以将int 转化为string*/ int len=numbers.size(); if(len==0) return "";//没有数,返回空字符串 string result=""; sort(numbers.begin(),numbers.end(),cmp); for(int i=0;i<len;i++) { result+=to_string(numbers[i]); } return result; } static bool cmp(int a,int b)//定义排序规则 { string A=to_string(a)+to_string(b); string B=to_string(b)+to_string(a); return A<B; } };
2.重建二叉树
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { int len=pre.size(); if(len<=0) return nullptr; TreeNode *head=new TreeNode(pre[0]);//前序遍历第一个节点即为根节点 int gen=0;//寻找中序遍历根节点的位置 for(int i=0;i<len;i++) { if(vin[i]==pre[0]) { gen=i; break; } } vector<int> pl,pr,vl,vr; for(int i=0;i<gen;i++) { pl.push_back(pre[i+1]); vl.push_back(vin[i]);//把左子树的节点分别放入两个数组 } for(int i=gen+1;i<len;i++) { pr.push_back(pre[i]); vr.push_back(vin[i]);//把右子树的节点分别放入两个数组 } head->left=reConstructBinaryTree(pl,vl); head->right=reConstructBinaryTree(pr,vr);//递归进行上述操作 return head; } };