牛骨文教育服务平台(让学习变的简单)
博文笔记

剑指offer(C++版本)

创建时间:2018-10-24 投稿人: 浏览次数:494

剑指offer(c++版本)

  • 二维数组查找
  • 替换空格
  • 从尾到头打印链表
  • 重建二叉树

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int row = array.size();
        int col = array[0].size();
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++)
            {
                if(target==array[i][j])
                {
                    return true;
                }
            }
        }
        return false;
    }
};

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。注:"a"和’a’的区别,前者是字符串,后者是字符。

class Solution {
public:
	void replaceSpace(char *str,int length) {
        int i=0;
        while(str[i]!="")
        {
            if(str[i]==" ")
            {
                for(int j=length-1;j>i;j--)
                {
                    str[j+2]=str[j];
                }
                str[i+2]="0";
                str[i+1]="2";
                str[i]="%";
                length+=2;
                i=i+2;
            }
            else
            {
                i++;
            }
        }
	}
};

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        ListNode* p=head;
        vector<int> result;
        while(p!=NULL){
            result.push_back(p->val);
            p=p->next;
        }
        reverse(result.begin(),result.end());
        return result;
    }
};

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

/**
 * 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=vin.size();
        if (len==0)
            return NULL;
        vector<int> left_pre,right_pre,left_vin,right_vin;
        TreeNode* head = new TreeNode(pre[0]);
        int gen = 0;
        for(int i=0;i<len;i++)
        {
            if(vin[i]==pre[0])
            {
                gen = i;
                break;
            }
        }
        for(int i=0;i<gen;i++)
        {
            left_pre.push_back(pre[i+1]);
            left_vin.push_back(vin[i]);
        }
        for(int i=gen+1;i<len;i++)
        {
            right_pre.push_back(pre[i]);
            right_vin.push_back(vin[i]);
        }
        head->left = reConstructBinaryTree(left_pre,left_vin);
        head->right = reConstructBinaryTree(right_pre,right_vin);
        return head;
    }
};
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。