編碼字典序排序
阿新 • • 發佈:2018-11-22
/**
* 假定一種編碼的編碼範圍是a ~ y的25個字母,從1位到4位的編碼,如果我們把該編碼按字典序排序,
* 形成一個數組如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …,
* yyyw, yyyx, yyyy 其中a的Index為0,aa的Index為1,aaa的Index為2,以此類推。
* 編寫一個函式,輸入是任意一個編碼,輸出這個編碼對應的Index.
*/
分析如下圖:
程式碼如下
public class Test1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.next(); System.out.println(encode(s)); } public static int encode(String s){ int index = 0; int[] factor = {25*25*25+25*25+25+1,25*25+25+1,25+1,1}; for(int i = 0; i < s.length();i++) { index = index + (s.charAt(i)-'a')*factor[i]+1; } return index-1; } }
我們知道了怎樣編碼,那麼相應的我們也可以利用這個陣列進行解碼,只需要用%來判斷。
public static void unencode(int index){ String s = null; int[] factor = {25*25*25+25*25+25+1,25*25+25+1,25+1,1}; int i = 0; int[] data = new int[4]; while(index > 0){ /** * 記錄四層中的每層的層數 */ data[i] = index/factor[i]; /** * 計算去掉這層之後剩下的索引數 */ index = index%factor[i]-1; i++; } for(int j = 0; j < data.length;j++) { /** * 輸出 */ System.out.print((char) ('a'+data[j])); } }