高質量的**
**的規範性
清晰的書寫,清晰的布局,合理的命名
應聘者在寫**的時候,最好用完整的英文單詞組合命名變數和函式,以便面試官能一眼讀懂**。
**的完整性
**是否完成了基本功能,輸入邊界能否能得到正確的輸出,是否對各種不規範的非法輸入做出了合理的錯誤處理。
測試用例
功能測試,邊界測試,負面測試
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...