如何快速将二维数组每行的尾随零设置为整数X?
嘿,这个问题很好解决,核心思路就是先找到每行里最后一个非零元素的位置,然后把这个位置之后的所有尾随零都替换成你要的整数X就行。我给你用几种常用编程语言写了具体实现,你可以直接参考:
解决思路
首先明确“尾随零”的定义:每行末尾连续的零,中间穿插的零不算。所以关键步骤是:
- 遍历二维数组的每一行
- 从行尾往前找,定位到该行最后一个非零元素的下标
- 将该下标之后的所有元素(也就是所有尾随零)替换为目标整数X
- 如果整行都是零,那么所有元素都属于尾随零,全部替换为X
具体实现
Python 版本
def replace_trailing_zeros(matrix, X): for row in matrix: last_non_zero_idx = -1 # 从后往前遍历,找到第一个非零元素的位置 for idx in range(len(row)-1, -1, -1): if row[idx] != 0: last_non_zero_idx = idx break # 替换从last_non_zero_idx+1到末尾的所有元素为X for idx in range(last_non_zero_idx + 1, len(row)): row[idx] = X return matrix # 测试用例 sample_matrix = [ [1, 0, 2, 0, 0], [3, 4, 0, 0], [0, 5, 0], [0, 0, 0] # 整行都是零,全部替换为X ] result = replace_trailing_zeros(sample_matrix, 9) for row in result: print(row)
说明:这个函数会原地修改输入的二维数组。如果不想改动原数组,可以先创建每行的副本再操作,比如把for row in matrix:改成for row in [r.copy() for r in matrix]:。
Java 版本
public class TrailingZeroReplacer { public static void replaceTrailingZeros(int[][] matrix, int target) { for (int[] row : matrix) { int lastNonZeroPos = -1; // 从行尾往前找最后一个非零元素 for (int i = row.length - 1; i >= 0; i--) { if (row[i] != 0) { lastNonZeroPos = i; break; } } // 替换尾随零 for (int i = lastNonZeroPos + 1; i < row.length; i++) { row[i] = target; } } } public static void main(String[] args) { int[][] testMatrix = { {1, 0, 2, 0, 0}, {3, 4, 0, 0}, {0, 5, 0}, {0, 0, 0} }; replaceTrailingZeros(testMatrix, 9); // 打印结果 for (int[] row : testMatrix) { for (int num : row) { System.out.print(num + " "); } System.out.println(); } } }
说明:Java的数组是引用类型,这里的实现也是原地修改。如果需要保留原数组,可以先复制整个二维数组再进行替换操作。
额外注意点
- 如果某一行没有尾随零(最后一个元素是非零值),函数不会对该行做任何修改,符合需求。
- 对于全零的行,所有元素都会被替换为X,这是合理的,因为整行没有非零元素,所有零都属于尾随零。
内容的提问来源于stack exchange,提问作者user1581390
相关产品推荐
相关产品推荐

