最近TopCoderの記事が多いのでもっとほかの記事も書きたいです。
250
public class TheLargestLuckyNumber {
public int find(int n) {
outer: for(int i = n; i >= 4; i--) {
for(int j = 0; j < Integer.toString(i).length(); j++) {
if(Integer.toString(i).charAt(j) != '7' && Integer.toString(i).charAt(j) != '4') {
continue outer;
}
}
return i;
}
return 0;
}
}早く解けた。2重ループだとラベル便利。500
public class TheLuckyNumbers {
public int count(int a, int b) {
int count = 0;
String sa = Integer.toString(a);
String sb = Integer.toString(b);
int len = sb.length();
for(int j = 1; j <= len; j++) {
for(int mask = 0; mask < (1 << j); mask++) {
String str = "";
for(int i = 0; i < j; i++) {
if((mask & (1 << i)) > 0) {
str += "7";
} else {
str += "4";
}
}
if((str.length() > sa.length() || (str.length() == sa.length() && str.compareTo(sa) >= 0)) && (str.length() < sb.length() || str.compareTo(sb) <= 0)) {
count++;
}
}
}
return count;
}
}250のように全探索すると、2秒以内に終わらないので計算量を減らす必要がある問題。いろいろな解き方でアプローチしてて時間内に終わらなかった。
自力で解くことはできたけど、これぐらいの問題を解けないと緑安定はしないし、解けるようになりたい。
roseとlilyのときにも使ったビットを使った方法で解いてます。この問題は解き方いくつかありそう。