【洛谷压缩技术续集题解】

代码

java 复制代码
package Array;
import java.util.*;
import java.util.Scanner;

public class Train{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		String firstline = scan.nextLine();
		int n = firstline.length();
		StringBuilder line = new StringBuilder(firstline); 
		
		for(int i = 1;i<n;i++) {
			String m = scan.nextLine();
			line.append(m);
		}
		
		char[] image = line.toString().toCharArray();
		
		int count = 1;
		int current = image[0];
		if(image[0] =='0') {
			System.out.print("0 ");
		}
		for(int i = 1;i<image.length;i++) {
		if(image[i]==current) {
			count++;
		}else {
			
			System.out.print(count+" ");
			current = image[i];
			count = 1;
			
		}
		}
		System.out.print(count);
	}
}

思路

1.这个题目输入的行数和列数一样所以我可以用一个String类型的变量firstline来保留第一行的输入,然后计算它的长度就可以得到这个矩阵要输入多少行n。

2.之后再创建一个StringBuilder的变量line,利用for循环结合第一步知道的总行数就知道接下来要循环多少次,接着就是多次输入,把剩余的行数全都存进line里。

3。接下来再利用line.toString().toCharArray();把line转成字符串数组,再用image保存。

4.之后就是遍历字符串数组并计数然后输出详细过程代码里讲。

java 复制代码
	String firstline = scan.nextLine();
		int n = firstline.length();
		StringBuilder line = new StringBuilder(firstline); 
		
		for(int i = 1;i<n;i++) {
			String m = scan.nextLine();
			line.append(m);
	char[] image = line.toString().toCharArray();
		}

这里创建了一个String类型的firstline变量用来保存第一行输入的数字,然后用n来保存长度,接下来创建StringBuilder类型的line变量,并把firstline当作初始数组传进去,之后根据n的值知道接下来要循环的次数就n-1次,所以写好for循环,每次输入后都保存输入的数并使用append方法将其添加到line里。然后还将line转为字符串数组方便后面遍历计数。

java 复制代码
		int count = 1;
		int current = image[0];
		if(image[0] =='0') {
			System.out.print("0 ");
		}
		for(int i = 1;i<image.length;i++) {
		if(image[i]==current) {
			count++;
		}else {
			
			System.out.print(count+" ");
			current = image[i];
			count = 1;
			
		}
		}
		System.out.print(count);

这里定义了一个计数器count,用于计数,current的作用是作为一串连续相同的数比较的对象。最开始current是image0后面的数都和它比较如果一直相同count会一直加加,当碰到不同的数时current会被这个不同的数替换,并且计数器归一,而后面的数开始与新的current进行比较如果相同则count加加如果又遇到不一样的数,current又会被重新被这个不同的替换,然后计数器又归一。这就是后面计数的原理,而且他是每计数完一串连续相同的数碰到不同的数时,它直接输出上一个记的数count,这样就可以保证除最后一个计数器外全部输出,循环外又加了一个输出语句,是为了保证最后一个count也可以输出。

为什么最后一个count无法在循环里输出呢?因为输出count的语句是在else里,进入else里的条件是碰到一个和它记录的数不同的数,比最后几个数都是0只有碰1时才会进入else里输出count而最后几个数都是相同的进入不了else里也就无法输出count,所以在循环外面补一个输出语句。

相关推荐
2601_9669496514 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
拓恒技术15 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨16 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫16 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
喵了几个咪16 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风17 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
文丑颜不良啊17 小时前
LeetCode876~900题目解析
java·leetcode
罗西的思考18 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
aloha_78918 小时前
Java 基础、集合、异常与 JUnit 5 速查
java·junit·sqlserver
淡海水18 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节