(java)leetcode717 1位元與2位元字元 即根據不同的長度對字元進行解碼(1-bit and 2-bit Characters)
阿新 • • 發佈:2018-11-01
題目描述:
有兩種特殊字元。第一種字元可以用一位元0
來表示。第二種字元可以用兩位元(10
或 11
)來表示。
現給一個由若干位元組成的字串。問最後一個字元是否必定為一個一位元字元。給定的字串總是由0結束。
示例1:
輸入:
bits = [1, 0, 0]
輸出: True
解釋:
唯一的編碼方式是一個兩位元字元和一個一位元字元。所以最後一個字元是一位元字元。
示例2:
輸入:
bits = [1, 1, 1, 0]
輸出: False
解釋:
唯一的編碼方式是兩位元字元和兩位元字元。所以最後一個字元不是一位元字元。
注意:
1 <= len(bits) <= 1000
bits[i]
總是0
或1
.
解題思路:
本題的解決辦法就是按順序解析陣列,如果第一個數字為1,則陣列下標後移兩位,如果第一個數字為0,陣列下標後移一位,根據解碼的規則而來。依次解碼陣列中的所有資料,陣列下標每後移一次,我們判斷一下陣列下標是否剛好是最後一位,如果是,因為最後一位剛好是0.所以返回true,否則返回false。
程式碼實現:
class Solution { public boolean isOneBitCharacter(int[] bits) { boolean flag=false; for(int i=0;i<bits.length;){ if(i==bits.length-1) flag=true; if(bits[i]==0){ i++; } else{ i=i+2; } } return flag; } }
補充:
上面的程式碼中,每次迴圈都要執行一次判斷,仔細觀察發現,最終得出程式結果應該是倒數第二次迴圈時,所以我們改進了程式碼,減少一次迴圈,但是解題思路不變。
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int i = 0;
while (i < bits.length - 1) {
i += bits[i] + 1;
}
return i == bits.length - 1;
}
}
本人才疏學淺,文中若有錯誤或有更好的方法,歡迎在評論中指出,共同進步。