问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
解题思路:
一开始拿到该题的时候的思路是利用贪心算法实现解题步骤,但是后来发现还有更为简单的解法,并且适合该题目的限制(输入数据为五位数或者六位数),故使用循环遍历进行拆分每一个进制位并判断当前循环数值是否符合要求的方法进行解题。Java代码实现如下:
import java.math.BigInteger;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
for (int i = 10000; i < 1000000; i++) {
String num = String.valueOf(i);
char[] chars = num.toCharArray();
if (chars.length == 5 && chars[0] == chars[4] && chars[1] == chars[3]){
if (chars[0] + chars[1] + chars[2] + chars[3] + chars[4] - 48 * 5==number){
System.out.println(i);
}
}else if (chars.length == 6 && chars[0] == chars[5] && chars[1] == chars[4] && chars[2] == chars[3]){
if (chars[0] + chars[1] + chars[2] + chars[3] + chars[4] + chars[5] - 48 * 6 == number){
System.out.println(i);
}
}
}
scanner.close();
}
}
该算法的时间复杂度为O(n),空间复杂度为O(1),因为在该算法实现过程中不需要占用额外多余的空间。