笔试刷题Day—2

二进制加法

在这里插入图片描述不太会,在进位的处理上。

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;//判断根是否为空?
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值