我需要一个返回true的代码,如果一个矩阵的所有元素都是从高到低排序的,我的意思是,如果一个矩阵的所有元素都是降序的,比如3-2-1,它应该返回true,如果3-1-2它应该返回false。如果矩阵是空的,那么它应该返回true。在任何其他情况下,它都应该返回false。矩阵是通过这个测试形成的。
@Test
public void testSortedDescendantMatrixRows() {
FirstSteps firstSteps = new FirstSteps();
int[][] matrix1 = {{3, 2, 1}, {5, 4, 3}, {8, 7, 6}};
assertTrue(firstSteps.isSortedDescendant(matrix1));
int[][] matrix2 = {{3, 2, 2}, {5, 4, 3}, {8, 7, 6}};
assertFalse(firstSteps.isSortedDescendant(matrix2));
int[][] matrix3 = {{3, 2, 1}};
assertTrue(firstSteps.isSortedDescendant(matrix3));
int[][] matrix4 = {{}};
assertTrue(firstSteps.isSortedDescendant(matrix4));
int[][] matrix5 = {{5, 4, 3, 2, 1}, {12, 5, 4, 3}, {34, 12, 10, 9, 8, 7, 6}};
assertTrue(firstSteps.isSortedDescendant(matrix5));
}
我的密码是
public boolean isSortedDescendant(int[][] matrix) {
if ((matrix.length == 0) || (matrix.length == 1)) {
return true;
} else {
for (int i = 0; i < matrix.length - 1; i++) {
for (int j = 0; j < matrix.length - 1; j++) {
if (matrix[i][j] <= matrix[i + 1][j + 1]) {
return false;
}
}
}
}
return true;
}
代码返回了错误的答案。
1条答案
按热度按时间xkrw2x1b1#
根据您的测试用例,我认为您需要检查每一行是否已排序。
这些是变化
这个
i < matrix.length - 1
至i < matrix.length
检查所有行。这个
matrix[i][j] <= matrix[i + 1][j + 1]
至matrix[i][j] <= matrix[i][j + 1]
比较同一行的元素。这个
j < matrix.length - 1
至j < matrix[i].length - 1
. 即使矩阵不是方阵,它也能保证逻辑工作有一种更简单的方法来编写上述逻辑