The key point is that we should generate the palindromes instead of enumerating all the numbers and checking if each one of them is palindrome. Since the number<=10^8, we only need to generate 10^4 palindromes. This is a great performance boost comparing to 10^8.
Lession Learned:
1. To generate palindrome, there is no need to enumerate range for each digit. We may just try [0, 9999]. I never think of this.
2. We should balance between performance and code complexity. For example, generating palindromes can boost performance a lot. However, I also tried to filter numbers<a or >b as special cases, but this performance care increases my code compexity a lot. I may just checking this after completing the numbers.
3. It seems that I am the only one use the DFS for this problem because I hate hard-coding.
4. During enumerating through an array, always use sizeof(arr)/sizeof(item_size) as upper limit. This will save you a lot of time during refactoring.
5. How to implement the "atoi":
int atoi(char str[], int len)
{
assert(arr!=NULL);
assert(len>0);
int number=0;
for(int j=0;j<len;j++)
{
number*=10;
number+=(str[j]-'0');
}
return number;
}