JAVA写一个简单的数字压缩算法 111155522500 -> [(1,4),(5,3),(2,2),(‘5,1’),(‘0’,2)]
时间: 2024-10-08 18:08:00 浏览: 19
在Java中编写一个简单的数字压缩算法,可以将连续相同的数字压缩成一对表示出现次数的元组,例如序列`111155522500`会变成`[(1, 4), (5, 3), (2, 2), ('5', 1), ('0', 2)]`。这里我们可以使用栈数据结构来辅助操作。下面是一个简单的实现:
```java
import java.util.ArrayList;
import java.util.List;
public class NumberCompression {
public static List<int[]> compress(String number) {
if (number.isEmpty()) return new ArrayList<>();
int[] currentGroup = {number.charAt(0) - '0', 1}; // 初始化当前数字和计数
List<int[]> result = new ArrayList<>();
for (int i = 1; i < number.length(); i++) {
if (number.charAt(i) == currentGroup[0]) {
currentGroup[1]++;
} else {
result.add(currentGroup);
currentGroup = new int[]{number.charAt(i) - '0', 1};
}
}
// 处理最后一个组
result.add(currentGroup);
return result;
}
public static void main(String[] args) {
String input = "111155522500";
List<int[]> compressed = compress(input);
for (int[] group : compressed) {
System.out.println("(" + group[0] + ", " + group[1] + ")");
}
}
}
```
在这个程序中,我们遍历输入字符串的每个字符,如果遇到连续的数字,则增加计数;如果遇到不同的数字,则把之前的组添加到结果列表,并开始一个新的组。最后处理完最后一个组后,就得到了压缩后的元组列表。
阅读全文