Java语言怎么实现不用循环就能判断一个矩阵中到底有多少个0没有输入的值?怎么判断矩阵中0的个数?什么是行列扫描?
效果如图
代码如下
public class Main {
public static void main(String[] args) {
int[][] matrix = {
{1, 0, 3},
{4, 0, 6},
{7, 8, 9}
};
int zeroCount = countZeros(matrix);
System.out.println("矩阵中的零的个数:" + zeroCount);
}
public static int countZeros(int[][] matrix) {
int rowCount = matrix.length; // 矩阵行数
int columnCount = matrix[0].length; // 矩阵列数
int zeroCount = 0; // 零的个数计数器
// 逐行扫描
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < columnCount; j++) {
if (matrix[i][j] == 0) {
zeroCount++;
}
}
}
/*
* 或者可以选择逐列扫描,将上面的行列循环交换即可。
* for (int j = 0; j < columnCount; j++) {
* for (int i = 0; i < rowCount; i++) {
* if (matrix[i][j] == 0) {
* zeroCount++;
* }
* }
* }
*/
return zeroCount;
}
}
结合GPT和我的想法:
在Java语言中,如果你不希望使用显式的循环来判断矩阵中0的个数,你可以考虑使用递归或者流处理的方式来实现。以下是两种可能的方法:
使用递归:
java
Copy code
public class MatrixZeroCounter {
public static int countZeros(int[][] matrix) {
return countZerosRecursive(matrix, 0, 0);
}
private static int countZerosRecursive(int[][] matrix, int row, int col) {
if (row >= matrix.length) {
return 0;
}
if (col >= matrix[row].length) {
return countZerosRecursive(matrix, row + 1, 0);
}
int count = countZerosRecursive(matrix, row, col + 1);
if (matrix[row][col] == 0) {
count++;
}
return count;
}
public static void main(String[] args) {
int[][] matrix = {
{1, 0, 3},
{0, 5, 6},
{0, 0, 9}
};
int zeroCount = countZeros(matrix);
System.out.println("矩阵中0的个数为:" + zeroCount);
}
}
使用流处理:
java
Copy code
import java.util.Arrays;
public class MatrixZeroCounter {
public static int countZeros(int[][] matrix) {
return Arrays.stream(matrix)
.flatMapToInt(row -> Arrays.stream(row))
.filter(num -> num == 0)
.toArray()
.length;
}
public static void main(String[] args) {
int[][] matrix = {
{1, 0, 3},
{0, 5, 6},
{0, 0, 9}
};
int zeroCount = countZeros(matrix);
System.out.println("矩阵中0的个数为:" + zeroCount);
}
}
行列扫描是一种扫描矩阵元素的方法,它是指先扫描行,然后再扫描列(或者先扫描列,再扫描行)。在上面的两种方法中,递归方法是通过递归调用来实现行列扫描,而流处理方法则是通过流处理的方式来将矩阵扁平化,然后筛选出为0的元素,从而实现行列扫描。在实际应用中,行列扫描的选择会根据具体的问题和需求来决定。
行列扫描,是指用双层for循环去遍历一个数组
判断的话用if即可,当是0的时候,答案就加一
在直接问这个问题之前,面试官先问了我下面这个问题:
请说一下String常用的方法有哪些?
该问题其实是考察Java基础,毕竟String类在平时的开发中使用非常广泛,我当时主要说了以下方法:
以上只是面试时我想到的一少部分方法,更多String的方法大家可在IDEA中查看源码,毕竟太多了,如下所示:
在回答完上述问题后,面试官紧接着问了该问题:
如何判断一个字符串中某个字符出现的次数?
听到该问题,我脑海中第一反应是先把字符串转换为字符数组,然后使用foreach循环,在循环体内进行字符比对,代码如下所示:
public static void main(String[] args) {
String str = "ABC123ABC";
char searchChar = 'B';
int count = 0;
char[] charArray = str.toCharArray();
for (char item : charArray) {
if (item == searchChar) {
count++;
}
}
System.out.println("字符" + searchChar + "出现的次数为:" + count);
}
输出结果如下所示:
字符B出现的次数为:2
但面试题肯定不会这么简单,紧接着面试官增加了限制条件:
如果不能使用循环,只使用String自己的方法,如何实现呢?
实现方法有很多种,但我推荐使用replace()方法,很好理解,并且高效,代码如下所示:
public static void main(String[] args) {
String str = "ABC123ABC";
String searchChar = "B";
int count = 0;
int origialLength = str.length();
str = str.replace(searchChar, "");
int newLength = str.length();
count = origialLength - newLength;
System.out.println("字符" + searchChar + "出现的次数为:" + count);
}
而且我觉得,关于面试题:如何判断一个字符串中某个字符出现的次数?,上面这个实现方法才是面试官真正想听到的答案。