题目描述
奇怪的数列
从 X 星截获一份电码,是一些数字,如下:
13
1113
3113
132113
1113122113
⋯⋯
YY 博士经彻夜研究,发现了规律:
第一行的数字随便是什么,以后每一行都是对上一行"读出来"
比如第 2 行,是对第 1 行的描述,意思是:1 个 1,1 个 3,所以是:1113
第 3 行,意思是:3 个 1,1 个 3,所以是:3113
请你编写一个程序,可以从初始数字开始,连续进行这样的变换。
输入描述
第一行 输入一个数字组成的串,不超过 100 位。
第二行,一个数字 n,表示需要你连续变换多少次,n 不超过 20。
输出描述
输出一个串,表示最后一次变换完的结果。
输入输出样例
示例
输入
5
7
输出
13211321322115
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
我的解答:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {/*** 计算传入字串第一个字符连续出现的个数*/private static int countNum(String s){int cnt=1;// 获取字符串第一个字符char c = s.charAt(0);for(int i=1;i<s.length();i++){if(c == s.charAt(i)){cnt++;}else{break;}}return cnt;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...// 初始化结果字符串String result = new String();// m 不超过100String m = scan.next();// n 不超过 20int n = scan.nextInt();// 经过 n 次变换for(int i=1;i<=n;i++){StringBuilder temp = new StringBuilder();for(int j=0;j<m.length();){// 需要处理的子串String subString = m.substring(j);// 拿到当前数字char subChar = subString.charAt(0);// 拿到m中前面数字的长度int cnt = countNum(subString);// 追加当前数字出现的个数temp.append(cnt);// 追加当前数字temp.append(subChar);j+=cnt;}m = temp.toString();result = m;}System.out.println(result);scan.close();}
}
感觉挺简单的,没什么难度。