【劍指offer{1-3}】二維陣列查詢、空格替換、從尾到頭列印連結串列
阿新 • • 發佈:2018-12-26
注:程式碼均在牛客網上執行,結果均通過!
二維陣列查詢
題目描述
- 在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
- 選擇最右上角的數值與給定的target進行比較,如若數值小則往下移,如若數值大則往左移即可。
C++程式碼展示
class Solution { public: bool Find(int target, vector<vector<int> > array) { int rows = array.size(); int cols = array[0].size()-1; int row = 0; while(row<rows && cols>=0) { if(target==array[row][cols]) { return true; } else if(target>array[row][cols]) { row++; } else { cols--; } } return false; } };
空格替換
題目描述
- 請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
C++程式碼展示
class Solution { public: void replaceSpace(char *str,int length) { if(str==NULL) { return; } int lenSpace = 0; int oldLength = 0; for(int i = 0;i<length-1;i++) { if(str[i]==' ') { lenSpace++; } oldLength++; } int newLen = oldLength + lenSpace*2; int first = oldLength-1; int last = newLen-1; while(first<=last && first>=0) { if(str[first]!=' ') { str[last--] = str[first]; } else if(str[first]==' ') { str[last--] = '0'; str[last--] = '2'; str[last--] = '%'; } first--; } } };
從頭到尾列印連結串列
題目描述
- 輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。
- 壓入一個棧中,棧的特點是先進後出,因此棧頂元素就是連結串列的表尾節點,依次彈出。
C++程式碼展示
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int>result; if(head==NULL) { return result; } ListNode*p = head; ListNode*q = head->next; head->next = NULL; ListNode *r = NULL; while(q!=NULL) { r = q->next; q->next = p; p = q; q = r; } head = p; ListNode *ptemp = head; while(ptemp!=NULL) { result.push_back(ptemp->val); ptemp = ptemp->next; } return result; } };