package com.interview.flag.o;
import com.interview.utils.ConsoleWriter;
import java.util.ArrayList;
import java.util.List;
/**
* Created_By: stefanie
* Date: 15-1-14
* Time: 上午11:54
*/
public class O9_NumbersWithFive {
public List<Integer> numbers(int upbound){
List<Integer> numbers = new ArrayList();
if(upbound < 5) return numbers;
numbers.add(5);
int base = 10;
while(upbound / base > 0){
List<Integer> current = new ArrayList();
int largest = upbound/(base * 10) == 0? upbound/base : 10; //if highest digit
for(int i = 1; i < largest; i++){
if(i == 5){
for(int j = 0; j < base; j++) current.add(i * base + j);
} else {
for(Integer number : numbers) current.add(i * base + number);
}
}
if(largest != 10){
int lower = upbound % base;
if(largest == 5){
for(int j = 0; j < lower; j++) current.add(largest * base + j);
} else {
for(int j = 0; j < numbers.size() && numbers.get(j) < lower; j++)
current.add(largest * base + numbers.get(j));
}
}
numbers.addAll(current);
base = base * 10;
}
return numbers;
}
public static void main(String[] args){
O9_NumbersWithFive finder = new O9_NumbersWithFive();
List<Integer> numbers = finder.numbers(552);
ConsoleWriter.printCollection(numbers);
}
}