328——二维矩阵值变为1最小操作次数 && next、nextInt、nextLine

一、next、nextInt、nextLine区别

1.next()

next()不光是接收键盘输入的内容,而且还进行分割。例如默认分隔符为空格

java 复制代码
        Scanner sc  = new Scanner(System.in);

        while (true){
            String str = sc.next();
            System.out.println(str + "A");
        }


// 输出结果
input:111 222 333 

output:
111A
222A
333A

2.nextLine()

读取输入: 包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行。所以它和next()的区别就是它没有分隔符,直接扫描全部的键盘输入内容,并创建对象进行将其引用返回

java 复制代码
 Scanner sc  = new Scanner(System.in);
 String str = sc.nextLine();
 System.out.println("str=" + str);


input:
111 222 333
output:
str=111 222 333

3.nextInt()

nextInt() 是取next() 然后把字符串解析成一个int数字。

它本质是调用了next()方法,然后将next()方法返回的字符串再解析成int型数字返回。

java 复制代码
// nextInt用法示例:
      while (true){
            int n = sc.nextInt();
            System.out.println("n= " + n + '0');
       }

input :
111 222 333

output:
n= 1110
n= 2220
n= 3330

二、算法

题目:

游游拿到了一个 01 矩阵,她每次操作可以选择一个1*2(1行2列,不能2行1列)的区域,将所有字符都变成1。游游想知道,将所有字符都变成1需要最少操作多少次?

输入描述:

第一行输入n,m 表示矩阵的行和列

接下来的n行,每行输入一个长度为m 的0/1,代表矩阵的值

输出描述:

一个整数,代表游游的最小操作次数

代码:

java 复制代码
import java.util.Scanner;

public class MeiTuan {
    /*
     * 游游拿到了一个 0-1 矩阵,
     * 她每次操作可以选择一个1*2(1行2列,不能2行1列)的区域,将所有字符都变成1。
     * 游游想知道,将所有字符都变成1需要最少操作多少次?
     * */
    public static void main(String[] args) {
        // 处理输入 第一行输入n,m 表示矩阵的行和列
        // 接下来的n行,每行输入一个长度为m 的0/1,代表矩阵的值
        Scanner sc = new Scanner(System.in);
        // 读取n和m
        System.out.println("请输入矩阵的行和列");
        int n = sc.nextInt();
        int m = sc.nextInt();

        sc.nextLine();  // 读取并丢弃行尾剩余部分

        // 初始化矩阵
        int[][] matrix = new int[n][m];

        // 向矩阵中输入内容
        for (int i = 0; i < n; i++) {
            // 读取一行内容
            String line = sc.nextLine();
            for (int j = 0; j < m; j++) {
                matrix[i][j] = line.charAt(j) - '0';    // 将line中的内容存入数组中并转为整数
            }
        }
        // 调用最少操作次数函数
        System.out.println(minOperations(matrix));
    }

    public static int minOperations(int[][] matrix){
        // 得到矩阵的行和列
        int n = matrix.length;
        int m = matrix[0].length;

        // 初始化最小操作数
        int operations = 0;

        // 遍历二维数组
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                // 判断数组中当前值是否为0
                if(matrix[i][j] == 0){
                    // 若其右侧单元格还是0,一起转换
                    if(matrix[i][j+1] == 0 && j < m){
                        operations++;
                        j++;    // 跳过下一个单元格
                    }else {
                        // 若其右侧单元格不是0,那么只增加操作数的值
                        operations++;
                    }
                }
            }
        }
        return operations;
    }
}
相关推荐
L_090711 小时前
【Algorithm】Day-4
c++·算法·leetcode
代码充电宝11 小时前
LeetCode 算法题【简单】20. 有效的括号
java·算法·leetcode·面试·职场和发展
海琴烟Sunshine11 小时前
leetcode 119. 杨辉三角 II python
算法·leetcode·职场和发展
小杨的全栈之路11 小时前
霍夫曼编码:数据压缩的核心算法详解(附图解 + 代码)
算法
cjinhuo11 小时前
标签页、书签太多找不到?AI 分组 + 拼音模糊搜索,开源插件秒解切换难题!
前端·算法·开源
贝塔实验室11 小时前
频偏估计方法--快速傅里叶变换(FFT)估计法
网络协议·算法·数学建模·动态规划·信息与通信·信号处理·傅立叶分析
闭着眼睛学算法12 小时前
【双机位A卷】华为OD笔试之【模拟】双机位A-新学校选址【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
玉夏12 小时前
【每日算法C#】爬楼梯问题 LeetCode
算法·leetcode·c#
学好statistics和DS12 小时前
【CV】泊松图像融合
算法·计算机视觉
贝塔实验室12 小时前
QPSK信号载波同步技术---极性Costas 法载波同步
计算机网络·算法·网络安全·数学建模·信息与通信·信号处理·傅立叶分析