截止到目前我已經寫了 600多道演算法題,其中部分已經整理成了pdf檔案,目前總共有1000多頁(并且還會不斷的增加),大家可以免費下載
下載鏈接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取碼:6666


這題是讓在字串num的所有非空子串中找出最大的奇數,我們知道只有個位數是奇數(比如1,3,5,7,9),這個數才可能是奇數,如果個位數是偶數,前面無論怎么截取,最侄訓是偶數,所以如果想把一個數字變為奇數,唯一能改變的就是他的個位數,所以這題思路就很簡單了
先判斷字串num最右邊的數字是否是奇數:
- 如果是奇數直接回傳
- 如果不是奇數在判斷他的倒數第2位是不是奇數,如果是奇數就從前面截取,如果不是就繼續判斷倒數第3位……
視頻鏈接

看下代碼
public String largestOddNumber(String num) {
for (int i = num.length() - 1; i >= 0; i--) {
//判斷最后一個數字是否是奇數,如果是奇數直接截取回傳
if (((num.charAt(i) - '0') & 1) == 1)
return num.substring(0, i + 1);
}
return "";
}
時間復雜度:O(n),n是字串的長度,最差情況下都是偶數,遍歷所有字符,
空間復雜度:O(1),
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/301742.html
標籤:java
