Here's how you can do it with a recursive function (the code is in Java):
void doOperation(List<Integer> list, int prefix, int minimum, int maximum) { for (int i = 0; i <= 9; i++) { int newNumber = prefix * 10 + i; if (newNumber >= minimum && newNumber <= maximum) { list.add(newNumber); } if (newNumber > 0 && newNumber <= maximum) { doOperation(list, newNumber, minimum, maximum); } } }
You call it this way:
List<Integer> numberList = new ArrayList<Integer>(); int min=1, max =100; doOperation(numberList, 0, min, max); System.out.println(numberList.toString());
EDIT:
I translated my C ++ code here :
#include <stdio.h> void doOperation(int list[], int &index, int prefix, int minimum, int maximum) { for (int i = 0; i <= 9; i++) { int newNumber = prefix * 10 + i; if (newNumber >= minimum && newNumber <= maximum) { list[index++] = newNumber; } if (newNumber > 0 && newNumber <= maximum) { doOperation(list, index, newNumber, minimum, maximum); } } } int main(void) { int min=1, max =100; int* numberList = new int[max-min+1]; int index = 0; doOperation(numberList, index, 0, min, max); printf("["); for(int i=0; i<max-min+1; i++) { printf("%d ", numberList[i]); } printf("]"); return 0; }
Basically, the idea is this: for each digit (0-9) I add it to the array if it is between minimum and maximum . Then I call the same function with this number as a prefix. It does the same: for each digit, it adds it to the prefix ( prefix * 10 + i ), and if it is between the limits, it adds it to the array. It stops when newNumber greater than the maximum.
True soft
source share