二进制加法
不太会,在进位的处理上。
class Solution {
public:
string addBinary(string a, string b) {
int ret = 0;
int m = a.size()-1;
int n = b.size()-1;
string res;
while(m >= 0||n >= 0||ret != 0){//字符串a或者字符串b或者ret不为0
if(m>=0) //如果m>=0的话,ret = ret + a[m],a[m]左移一位
{
ret += a[m--] - '0';
}
if(n>=0) //如果n>=0的话,ret = ret + a[n],a[n]左移一位
{
ret += b[n--] - '0';
}
res += (ret % 2) + '0';//res加上1或者0
ret /= 2;//如果ret是1或者0的话 ret = 0, 如果ret是2 的话 ret = 1.表示为下一次做准备
}
reverse(res.begin(), res.end());//翻转一下次序。
return res;
}
};
进位操作:
res += (ret % 2) + '0';//res加上1或者0
ret /= 2;//如果ret是1或者0的话 ret = 0, 如果ret是2 的话 ret = 1.表示为下一次做准备
从尾到头打印链表
解法1:
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int> result;
stack<int> stack;
while(head){
stack.push(head->val);//入栈链表中的val元素
head= head->next;//链表位置的偏移
}
while(!stack.empty()){//当栈不为空
result.push_back(stack.top());//入栈栈顶元素
stack.pop();//栈元素出栈
}
return result;
}
};
解法2:
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
if(head == NULL)vector<int>();
ListNode* news = (ListNode*)malloc(sizeof(ListNode));
news = head;
vector<int> res;
while(news!=NULL){
res.push_back(news->val);
news = news->next;
}
reverse(res.begin(),res.end());
return res;
}
};
对称的二叉树
class Solution {
public:
bool check(TreeNode* left,TreeNode* right){
if(!left && !right)return true; //如果左右都为空,返回true
if(!left || !right)return false; //如果某一个不为空,返回错误
if(left->val!=right->val)return false;//如果左子树的数值不等于右子树的数值,返回错误
return check(left->left,right->right)&&check(left->right,right->left);//递归,左子树左边,右子树右边 左子树右边 右子树左边
}
bool isSymmetric(TreeNode* root) {
return root?check(root->left,root->right):true;//判断根是否为空?
}
};