劍指offer(C++版本)
阿新 • • 發佈:2018-12-17
劍指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]!='\0') { 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;
}
};