offer-Day03
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
class Solution {
public:
int Sum_Solution(int n) {
bool a[n][n+1];
return sizeof(a)>>1;
}
};
- 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> A;
while(head){
A.push_back(head->val);
head =head ->next;
}
reverse(A.begin(), A.end());
return A;
}
};
- 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
if (pre.size() == 0 || vin.size() == 0) {
return NULL;
}
TreeNode* treeNode = new TreeNode(pre[0]);
int mid = distance(begin(vin), find(vin.begin(), vin.end(), pre[0]));
vector<int> left_pre(pre.begin() + 1, pre.begin() + mid + 1);
vector<int> right_pre(pre.begin() + mid + 1, pre.end());
vector<int> left_in(vin.begin(), vin.begin() + mid);
vector<int> right_in(vin.begin() + mid + 1, vin.end());
treeNode->left = reConstructBinaryTree(left_pre, left_in);
treeNode->right = reConstructBinaryTree(right_pre, right_in);
return treeNode;
}