

原代码:
#include<stdio.h>
#include<string.h>
int min(int a,int b){
return (a>b)?b:a;
}
int main(){
int T;
scanf("%d",&T);
getchar();
while(T--){
char s[100005];
scanf("%s",s);
int len=strlen(s);
if(len==1){
printf("%s\n",s);
continue;
}
int i=0;
for(int d=0;d<len-1;d++){
if(s[d]>s[d+1]){
char temp[100005];
if(d!=0)
strncpy(temp,s,d-1);
strncpy(temp+d,s+d+1,len-d-1);
temp[len-1]=min(s[d]-'0'+1,9)+'0';
temp[len]='\0';
strcpy(s,temp);
}
}
printf("%s\n",s);
}
}
显然时间超限了,现在用空间换时间,引入整数数组,并且长度为len3倍
#include<stdio.h>
#include<string.h>
#define maxsize 100000
int min(int a, int b) {
if (a >= b) {
return b;
} else {
return a;
}
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
char str[maxsize];
scanf("%s", str);
int len = strlen(str);
int arr[len * 9];
for (int i = 0; i < len; i++) {
arr[i] = str[i] - '0';
}
int z = len;
for (int i = 0; i < z; i++) {
if (arr[i] > arr[i + 1]) {
arr[z] = min(arr[i] + 1, 9);
z++;
arr[i] = 11;
}
}
for (int i = 0; i < z; i++) {
if (arr[i] != 11) {
printf("%d", arr[i]);
}
}
printf("\n");
}
return 0;
}