数码串和oj

原代码:

复制代码
#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;
}
相关推荐
源代码•宸7 分钟前
Leetcode—712. 两个字符串的最小ASCII删除和【中等】
开发语言·后端·算法·leetcode·职场和发展·golang·dp
无限进步_11 分钟前
【C语言&数据结构】相同的树:深入理解二叉树的结构与值比较
c语言·开发语言·数据结构·c++·算法·github·visual studio
java修仙传22 分钟前
力扣hot100:每日温度
算法·leetcode·职场和发展
潇潇云起24 分钟前
mapdb
java·开发语言·数据结构·db
咚咚王者25 分钟前
人工智能之核心基础 机器学习 第十章 降维算法
人工智能·算法·机器学习
源代码•宸34 分钟前
Golang语法进阶(Context)
开发语言·后端·算法·golang·context·withvalue·withcancel
源代码•宸35 分钟前
Golang语法进阶(Sync、Select)
开发语言·经验分享·后端·算法·golang·select·pool
sali-tec35 分钟前
C# 基于OpenCv的视觉工作流-章8-形态学
人工智能·深度学习·opencv·算法·计算机视觉
栈与堆39 分钟前
数据结构篇(1) - 5000字细嗦什么是数组!!!
java·开发语言·数据结构·python·算法·leetcode·柔性数组
LightYoungLee1 小时前
算法(五)树 Trees V2
学习·算法·深度优先