アルゴリズム——進数変換

2246 ワード

LintCodeの上でアルゴリズムを学ぶことを始めて、先に簡単なアルゴリズムから練習します——進数の変換
説明:Given a decimal number n and an integer k,Convert decimal number n to base-k.
10進数nと整数kを提供し、10進数nをk進数に変換する
1.0<=n<=2^31-1, 2<=k<=16  
2.Each letter over 9 is indicated in uppercase>
サンプル
Example 1:Given n = 5, k = 2return "101"Example 2:Given n = 30, k = 16
return "1E"
はい、最初の試みを行います.
public class Solution {
    /**
     * @param n: a decimal number
     * @param k: a Integer represent base-k
     * @return: a base-k number
     */
    private static char[] array="0123456789ABCDEF".toCharArray();
    public static String hexConversion(int n, int k) {
        // write your code here
        Stack stack=new Stack();
        StringBuilder result=new StringBuilder(0);
        while(n!=0){
            stack.add(array[new Long((n % k)).intValue()]);
            n=n/k;
        }
        for (;!stack.isEmpty() ; ){
            result.append(stack.pop());
        } 
        return result.length()==0?"0":result.toString();
    }
    
    // public static void main (String[] args) {
    //     Scanner in=new Scanner(System.in);
    //     int scr=in.nextInt();
    //     int aim=in.nextInt();
    //     hexConversion(5,6);
    // }
}

エディタがmainメソッドを自動的に定義することを知らないで、まだ下でばかげて定義して、メソッドは他の人から学んだので、stackクラスを使ったことがなくて、書く過程でintvalue()、pop()、add()とpush()の違いを学びました.
add()とpush()の違い;
stack自体にadd()メソッドはありません.vactor親クラスから継承されます.add()は要素を追加し、vactor実スタックの先端に1つ以上の要素を追加し、新しいスタックに戻ります.
2つ目の方法は次のとおりです.
public class Solution {
    /**
     * @param n: a decimal number
     * @param k: a Integer represent base-k
     * @return: a base-k number
     */
    private static char[] array="0123456789ABCDEF".toCharArray();
    public static String hexConversion(int n, int k) {
        // write your code here
        String result="";
        for (int i=n;i>0 ;i=i/k){
            result =array[i%k]+result;
        }
        return result==""?"0":result;
    }

}
コードは少し最適化されており、考え方も簡単で、returnのものは注意が必要で、戻り値が0であれば定義が必要です.