程式設計師演算法練習四

2021-09-11 21:41:38 字數 2683 閱讀 1348

給定乙個 32 位有符號整數,將整數中的數字進行反轉。

示例 1:

輸入: 123 輸出: 321 示例 2:

輸入: -123 輸出: -321 示例 3:

輸入: 120 輸出: 21 注意:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。

常規思路解題,求餘數,需要注意的是溢位判斷。

class solution 

return t;

}};複製**

實現 atoi,將字串轉為整數。

在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。

字串可以在形成整數的字元後面包括多餘的字元,這些字元可以被忽略,它們對於函式沒有影響。

當字串中的第乙個非空字串行不是個有效的整數;或字串為空;或字串僅包含空白字元時,則不進行轉換。

若函式不能執行有效的轉換,返回 0。

說明:假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。如果數值超過可表示的範圍,則返回 int_max (231 − 1) 或 int_min (−231) 。

示例 1:

輸入: "42" 輸出: 42 示例 2:

輸入: " -42" 輸出: -42 解釋: 第乙個非空白字元為 '-', 它是乙個負號。 我們盡可能將負號與後面所有連續出現的數字組合起來,最後得到 -42 。 示例 3:

輸入: "4193 with words" 輸出: 4193 解釋: 轉換截止於數字 '3' ,因為它的下乙個字元不為數字。 示例 4:

輸入: "words and 987" 輸出: 0 解釋: 第乙個非空字元是 'w', 但它不是數字或正、負號。 因此無法執行有效的轉換。 示例 5:

輸入: "-91283472332" 輸出: -2147483648 解釋: 數字 "-91283472332" 超過 32 位有符號整數範圍。 因此返回 int_min (−231) 。

其實就是atoi的函式實現,依然較為簡單,依次判斷所有條件即可。空格,正負號,溢位,是否為數字

class solution 

int sign = 1, base = 0, i = 0,n = str.size();

while (i < n && str[i] == ' ')

if (str[i] == '+' || str[i] == '-')

while (i = '0' && str[i] <= '9')

base = 10 * base + (str[i] - '0');

i++;

}return sign *base;

}};複製**

乙個機械人位於乙個m x n網格的左上角 (起始點在下圖中標記為「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

問總共有多少條不同的路徑?

例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?

說明:m和n的值均不超過 100。

示例 1:

輸入: m = 3, n = 2 輸出: 3 解釋: 從左上角開始,總共有 3 條路徑可以到達右下角。

向右 -> 向右 -> 向下

向右 -> 向下 -> 向右

向下 -> 向右 -> 向右

示例 2:

輸入: m = 7, n = 3 輸出: 28

除了dfs和bfs搜尋演算法,這題其實典型的動態規劃。我們可以假設dp[i][j]的值就是第i行,j列的路徑數,很明顯i = 0.的所有值都是1,j = 0的所有值都為1,只有一條路徑。而除此之外dp[i][j] = dp[i-1][j] + dp[i][j-1];時間複雜度o(nm),空間複雜度o(nm)

class solution 

else}}

return dp[m-1][n-1];

}};複製**

給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。

示例:給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5. 說明:

給定的 n 保證是有效的。

高階:你能嘗試使用一趟掃瞄實現嗎?

思路一趟掃瞄,使用雙指標,可以指定兩個相差n的節點指標遍歷鍊錶,這樣前面的指標遍歷到鍊錶尾部的時候,後面的指標正好在倒數第n+1個節點的位置,刪除節點只需要改變next指向即可。**並不複雜。

class solution 

while (head != null)

//刪除結點

end->next = end->next->next;

return headcache->next;

}};複製**

程式設計師演算法練習二

無重複字元的最長子串 給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而...

黑馬程式設計師 for練習

namespace for練習 console.writeline sum console.readkey 2 找出100 999間所有水仙花數 水仙花是乙個三位數,每一位數的立方相加等於該數本身 static void main string args console.readkey 3 分解乙個...

練習聊天程式設計師

using system using system.collections.generic using system.linq using system.text namespace 練習聊天機械人 class program static void main string args 機械人 r1 ...