2.2.蓝桥杯-数位递增的数
题目描述
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数。
例如 1135 是一个数位递增的数,而 1024 不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
输入描述
输入的第一行包含一个整数 n(1<n<10⁶)。
输出描述
输出一行包含一个整数,表示答案。
输入输出样例
示例
输入
30
输出
26
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
解答:
package Practice1;import java.util.Arrays;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//1.定义变量记录上限long n = sc.nextLong();/*定义变量记录数位递增的数的个数*/int num = 0;//2.开始查找for (int i = 1; i <= n; i++) {//3.把当前处理的数转换为字符数组String s = Long.toString(i); //首先把当前处理的数转换为字符串char[] init = s.toCharArray(); //init记录s转换为的字符数组(不参与排序)char[] fin = s.toCharArray(); //fin记录s转换为的字符数组(参与排序)//4.把字符数组fin进行排序Arrays.sort(fin); //sort方法默认升序排序//6.把init与fin相比,如果不一样,说明对init进行了升序排序,就不是数位递增的数,反之一样的话就是数位递增的数if (Arrays.equals(init, fin)) num++;/*Arrays.equals(init, fin)用来比较数组init和fin的属性值是否想等,相等的话返回true,不相等返回false*/}//7.输出数位递增的数的个数System.out.println(num);sc.close();}
}