2011年12月16日金曜日

TopCoder SRM280 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について、おおまかに説明する。

1以上、正の整数n未満の整数で、各桁の数がすべて違うものはいくつあるかを返すメソッドを作成せよ。

私の解答はこちら。

import java.util.HashSet;

public class UniqueDigits {

 public int count(int n) {
  int nUnique = 0;
  HashSet<Character> set = new HashSet();
  for( int i=1 ; i<n ; i++ ){
   String num = "" + i;
   for( int j=0 ; j<num.length() ; j++ ){
    set.add(num.charAt(j)); // 各桁を分解して集合を取る
   }
   // もとの桁数と集合の要素数が一致したら各桁の数はすべて異なる
   if( set.size() == num.length() ) nUnique++; 
   set.removeAll(set); // 集合は空にしておく
  }
  return nUnique;
 }

}

得点は233.17/250。中央値は約220点。要素は昇順にしなくても良いので、TreeSetではなくHashSetで十分。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計