题目
给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为953。
如果输入的数字为负数,返回-1。
解题思路:先找出某个部分中的最大递减数,接着再在这些所以最大递减数中找一个最大的,比如953中找到最大的递减数是953,5323中找到最大的递减数是532。具体过程是:依次遍历整型数组数组中的每一个数字,如果该数字比前一个数字小,则添加到StringBuffer中,否则就要处理Stringbuffer,如果此时Stringbuffer的长度大于1,则将Stringbuffer中的数添加到数组中,接着Stringbuffer清空,继续重复操作
代码
public class GetMaxDescendingNum {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
char[] c = in.next().toCharArray();
// 如果输入时非负数
if (c[0] != '-') {
int length = c.length;
System.out.println(length);
int[] num = new int[length];
for (int i = 0; i < length; i++) {
num[i] = Integer.parseInt(c[i] + "");
}
System.out.println(getMax(num));
}
// 如果输入是负数
else {
System.out.println(-1);
}
}
private static int getMax(int[] num) {
int length = num.length;
// 保存递减数的数组
int result[] = new int[length];
// 递减数组的下标
int count = 0;
// 利用Stringbuffer构造递减数
StringBuffer sb = new StringBuffer();
// 依次遍历整型数组数组中的每一个数字,如果该数字比前一个数字小,则添加到StringBuffer中,否则就要处理Stringbuffer
// 如果此时Stringbuffer的长度大于1,则将Stringbuffer中的数添加到数组中,接着Stringbuffer清空,继续重复操作
for (int i = 0; i < length; i++) {
if (i == 0)
sb.append(num[i]);
// 如果该数字比前一个数字小,则添加到StringBuffer中
else if (num[i] < num[i - 1])
sb.append(num[i]);
else if (num[i] >= num[i - 1]) {
// 如果此时Stringbuffer的长度大于1,则将Stringbuffer中的数添加到数组中
// ,接着Stringbuffer清空,继续重复操作
if (sb.length() > 1)
result[count++] = Integer.parseInt(sb + "");
sb = new StringBuffer();
sb.append(num[i]);
}
}
// 一定要记得将最后一组递减数放入到数组中
if (sb.length() > 1)
result[count++] = Integer.parseInt(sb + "");
int max = 0;
// 从保存递减数的数组中找到一个最大的数,进行返回
for (int i = 0; i < count; i++) {
if (result[i] > max)
max = result[i];
}
return max;
}
}