程式設計之旅 Day6

2021-09-13 03:25:27 字數 2756 閱讀 8958

(1)劍指offer

面試題10:斐波那契數列

面試題17:列印從1到最大的n位數

(2)leetcode

例1:鍊錶排序

例2:判斷鍊錶是否含有環

面試題10:斐波那契數列

題目描述:

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0),n<=39。

思路:

(1)遞迴-大量重複計算、效率低(不可取)

(2)迴圈實現遞迴思想-儲存中間過程避免重複計算、時間複雜度o(n)(ok)

(3)基於遞迴的o(n)求n次方-參考面試題16「數值的整數次方」(ok)

**:c++實現,基於思路(2)(已通過除錯!)

class solution 

int f1=0;

int f2=1;

int fn=0;

if(n==0)

else if(n==1)

else

}return fn;

}};

總結:加強基於斐波那契陣列的應用實踐比如「青蛙跳台階」、「使用2*1的小矩形橫豎覆蓋更大矩形」等諸多問題。

面試題17:列印從1到最大的n位數

題目描述:

輸入數字n,按順序列印出從1到最大的n位十進位制數。

思路:

(1)先求出最大的n位數,使用迴圈逐一列印-沒有考慮大數問題,最大n位數可能會造成整型或長整型(long long)溢位(不可取)

(2)字串上模擬數字加法(可取,但時間有限不好實現)

solution:1.在字串上模擬加法,用increment()函式實現

2.把字串表達的數字列印出來

注意點:(1)如何在每次增加1時快速判斷當前數字是否達到了最大的n位數,使得時間複雜度o(n).

(2)能否按閱讀習慣列印出數字,即對於n位數的字串如何實現從第乙個非0字元開始列印。

(3)採用數字排列解法,遞迴實現(可取,且**簡潔)

**:c++實現,基於思路(3),書上解法,牛客網上無對應例題故暫未除錯。

1 void print1tomaxofndigits(int n)

5 char *number=new char[n+1];

6 number[n]='\0';

7 for(int i=0;i<10;i++)

11 delete numbers;

12 }

14 void print1tomaxofndigitsrecursively(char *number,int length,int index)

19 for(int i=0;i<10;++i)

23 }

24 void printnumber(char *number)

listnode* right = sortlist(p->next);

p->next = null;

listnode* left = sortlist(head);

return merge(left, right);

}listnode *merge(listnode *left, listnode *right)

else

p = p->next;

}if (left) p->next = left;

if (right) p->next = right;

return dummy.next;

}};

例2:判斷鍊錶是否含有環

題目描述:

given a linked list, return the node where the cycle begins. if there is no cycle, returnnull. 

follow up:

can you solve it without using extra space? 

思路:

1.首先判斷是否存在環

2.若存在環,則從起點開始,每走一步就刪除上乙個節點的next指標,最後乙個節點就是環的起點。因為環的起點會存在兩個next指向它。

**:(已除錯通過!)

class solution 

listnode *fast=head;

listnode *slow=head;

while(fast&&fast->next)

}if(!fast||!fast->next)

listnode *pre=head;

listnode *cur=head->next;

while(cur)

pre->next=null;

pre=cur;

cur=cur->next;

}return pre;

}};

Day 6 函式式程式設計

函式式程式設計就是封裝成乙個個函式,一次呼叫來完成複雜任務。函式式程式設計的乙個特點是,允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式!高階函式就是將函式的變數名作為引數傳入,內部再對該函式進行呼叫的函式。乙個簡單的高階函式如下 def add x,y,f return f x f y x...

程式設計之旅 Day16

day16 學習內容 1.劍指offer 面試題32 從上往下列印二叉樹 面試題58 翻轉字元 2.leetcode 例1 跳躍遊戲 例2 已知n,生成count and say 序列 題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 使用佇列進行廣義優先遍歷 class sol...

程式設計之旅 Day39

day39 學習內容 1.劍指offer 面試題32 從上到下列印二叉樹 面試題32 把二叉樹列印成多行 面試題32 按之字形順序列印二叉樹 面試題36 二叉搜尋樹與雙向鍊錶 3.華為機試題 例1 取近似值 例2 合併表記錄 例3 提取不重複的整數 題目描述 從上往下列印出二叉樹的每個節點,同層節點...