劍指offer刷題 11

2021-10-20 06:40:33 字數 2440 閱讀 6571

高質量的**

**的規範性

清晰的書寫,清晰的布局,合理的命名

應聘者在寫**的時候,最好用完整的英文單詞組合命名變數和函式,以便面試官能一眼讀懂**。

**的完整性

**是否完成了基本功能,輸入邊界能否能得到正確的輸出,是否對各種不規範的非法輸入做出了合理的錯誤處理。

測試用例

功能測試,邊界測試,負面測試

3種錯誤處理的方法

函式用返回值告知呼叫者是否出錯

當錯誤發生時,設定乙個全域性變數。

異常 當函式執行出錯時,我們就丟擲乙個異常,根據不同的出錯原因定義不同的異常型別。

返回值 優點 和系統api一致 缺點 不能方便的使用計算結果

全域性變數 優點 能夠方便的使用計算結果 缺點 使用者可能會忘記檢查全域性變數

異常 優點 可以為不同的出錯原因定義不同的異常型別 邏輯清晰明了

缺點 有些語言不支援異常 ,丟擲異常時對效能有負面影響

面試題16:數值的整數次方

實現函式double power(double base,int exponent)求base 的exponent次方。

當指數為負數的時候,可以先對指數求絕對值,算出次方的結果之後再取倒數。

bool g_invalidinput =

false

;double

power

(double base,

int expoent)

unsigned

int ab***ponent = (unsigned

int)(exponent);if

(exponent<0)

ab***ponent =

(unsigned

int)

(-exponent)

;double result =

powerwithunsignedexponent

(base,ab***ponent);if

(exponent<0)

result =

1.0/result;

return result;

}double

powerwithunsignedexponent

(double base,

unsigned

int exponent)

double

powerwithunsignedexponent

(double base ,

unsigned

int exponent)

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

考慮大數問題,是否會溢位

在字串上模擬數字加法的解法

用字串或者陣列表示大數,再用字串表示數字時,最直觀的方法就是字串裡每個字元都是0-9之間的某乙個字元,用來表示數字中的一位,

首先把字串中每乙個數字都初始化為0,然後為字串表示的數字加1,

1.在字串表達的數字上模擬加法,2.把字串表達的數字列印出來。

void

print1tomaxofndigits

(int n)

delete

number;

}

increment 表示數字的字串number 上加1

bool

increment

(char

* number)

}else

}return isoverflow;

}

void

printnumber

(char

* number)

printf

("\t");

}}

把問題轉換成數字排列的解法,遞迴讓**更簡潔

如果我們在數字前面補0,就會發現n位所有十進位制數其實就是n個從0到9的全排列。

我們把數字的每一位都從0到9排列一遍,就得到了所有的十進位制數。

全排列用遞迴很容易表達,數字的每一位都可能是0-9乙個數,

void

print1maxofndigits

(int n)

delete

number;

}void

print1tomaxofndigitsrecursively

(char

* number ,

int length,

int index)

for(

int i =

0;i<10;

++i)

}

如果面試題是關於n位的整數並且沒有限定n的取值範圍,或者輸入任意大小的整數,那麼這道題很有可能是需要考慮大數問題的。字串是一種簡單的,有效的表示大數的方法。

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...

劍指offer刷題

原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...

劍指offer刷題 2

思路 如果從前往後進行遍歷,那麼每次找到乙個空格,則需要新增兩個位元組來進行替換,我們採用先對字串進行遍歷,查詢字串中的空格的個數,然後對新的字串進行長度的計算,然後從後往前進行替換,每遇到乙個空字元,然後進行替換。class solution int oldnumber 0 int numbers...