アルゴリズム——進数変換
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"
はい、最初の試みを行います.
エディタがmainメソッドを自動的に定義することを知らないで、まだ下でばかげて定義して、メソッドは他の人から学んだので、stackクラスを使ったことがなくて、書く過程でintvalue()、pop()、add()とpush()の違いを学びました.
add()とpush()の違い;
stack自体にadd()メソッドはありません.vactor親クラスから継承されます.add()は要素を追加し、vactor実スタックの先端に1つ以上の要素を追加し、新しいスタックに戻ります.
2つ目の方法は次のとおりです.
説明: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であれば定義が必要です.