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;
}
};

京公网安备 11010502036488号