代码如下,最后一个测试点过不去,说是内存超限
import java.util.Scanner;
public class Main{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int d;
int n;
d = in.nextInt();
n = in.nextInt();
String s = "" + d;
n = n - 1;
while(n>0){
s = change(s);
n--;
}
System.out.println(s);
in.close();
}
public static String change(String s){
String temp = "";
char ch;
int count;
int i=0;
while(i<s.length()){
ch = s.charAt(i++);
count = 1;
while(i<s.length()&&ch==s.charAt(i)){
count++;
i++;
}
temp += "" + ch + count;
}
return temp;
}
}求解答,万分感谢!
7 个解决方案
#1
虚拟内存太小了呗
#2
代码没有显示出错啊
#3
题目内存有限制,最后一个测试点,过不去
#4
怎么优化,求指导
#5
题目没看明白,从代码层面提几点建议吧
1. 键盘输入BufferedReader比Scanner性能更好;
2. IO操作比计算操作性能开销大很多,建议先一次性读取完所有输入,关闭输入流后再进行计算操作;
3. 字符串拼接性能:String < StringBuffer < StringBuilder,在不用考虑线程安全的情况下使用StringBuilder性能最佳。
1. 键盘输入BufferedReader比Scanner性能更好;
2. IO操作比计算操作性能开销大很多,建议先一次性读取完所有输入,关闭输入流后再进行计算操作;
3. 字符串拼接性能:String < StringBuffer < StringBuilder,在不用考虑线程安全的情况下使用StringBuilder性能最佳。
#6
自动判题系统难就难在限制时间,限制内存,限制代码长度,由于3个限制,简单的操作都变得困难
简单来说,交换2个数时,不允许借助第三个变量(限制内存),
这道题,不要用字符串拼接,用char数组,算好最长的大小,一个正整数 N(<=40)
简单来说,交换2个数时,不允许借助第三个变量(限制内存),
这道题,不要用字符串拼接,用char数组,算好最长的大小,一个正整数 N(<=40)
#7
import java.util.*;
public class PAT {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = sc.nextInt();
for(int i = 0; i < n-1; i++) {
str = method(str);
}
System.out.println(str);
}
public static String method(String input) {
StringBuilder str = new StringBuilder();
int i = 0, number = 1;
char b, a = input.charAt(i);
i++;
while(i < input.length()) {
b = input.charAt(i);
if(b == a) {
number++; i++;
}else {
str.append(a);
str.append(number);
a = input.charAt(i);
number = 1;
i++;
}
}
str.append(a); str.append(number);
return str.toString();
}
}
我去题目链接看了一下, 好像不太卡内存, 上述代码是我提交了的。 楼主可以参考一下!
另外,照我的经验, 楼主可能卡在了一个特殊的测试用例上了。 算法的问题
#1
虚拟内存太小了呗
#2
代码没有显示出错啊
#3
题目内存有限制,最后一个测试点,过不去
#4
怎么优化,求指导
#5
题目没看明白,从代码层面提几点建议吧
1. 键盘输入BufferedReader比Scanner性能更好;
2. IO操作比计算操作性能开销大很多,建议先一次性读取完所有输入,关闭输入流后再进行计算操作;
3. 字符串拼接性能:String < StringBuffer < StringBuilder,在不用考虑线程安全的情况下使用StringBuilder性能最佳。
1. 键盘输入BufferedReader比Scanner性能更好;
2. IO操作比计算操作性能开销大很多,建议先一次性读取完所有输入,关闭输入流后再进行计算操作;
3. 字符串拼接性能:String < StringBuffer < StringBuilder,在不用考虑线程安全的情况下使用StringBuilder性能最佳。
#6
自动判题系统难就难在限制时间,限制内存,限制代码长度,由于3个限制,简单的操作都变得困难
简单来说,交换2个数时,不允许借助第三个变量(限制内存),
这道题,不要用字符串拼接,用char数组,算好最长的大小,一个正整数 N(<=40)
简单来说,交换2个数时,不允许借助第三个变量(限制内存),
这道题,不要用字符串拼接,用char数组,算好最长的大小,一个正整数 N(<=40)
#7
import java.util.*;
public class PAT {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = sc.nextInt();
for(int i = 0; i < n-1; i++) {
str = method(str);
}
System.out.println(str);
}
public static String method(String input) {
StringBuilder str = new StringBuilder();
int i = 0, number = 1;
char b, a = input.charAt(i);
i++;
while(i < input.length()) {
b = input.charAt(i);
if(b == a) {
number++; i++;
}else {
str.append(a);
str.append(number);
a = input.charAt(i);
number = 1;
i++;
}
}
str.append(a); str.append(number);
return str.toString();
}
}
我去题目链接看了一下, 好像不太卡内存, 上述代码是我提交了的。 楼主可以参考一下!
另外,照我的经验, 楼主可能卡在了一个特殊的测试用例上了。 算法的问题