JAVA练习61-矩阵置零、字母异位词分组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

2月25日练习内容


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目1-矩阵置零

1.题目描述

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/set-matrix-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.思路与代码

2.1 思路

1.获取数组的行长度和列长度

2.创建两个boolean数组,为判断该行或列是否为0的标志

3.遍历数组,若找到某一个数字为0,则将其所在行和列的Boolean数组中标志位true

4遍历数组,若该行的索引位true,则将改行置为0,若该列的索引为true,则将该列置为0

2.2 代码 

代码如下(示例):

class Solution {
    public void setZeroes(int[][] matrix) {
        //数组长度
        int m = matrix.length;
        int n = matrix[0].length;

        //行或列为0的标志
        boolean[] row = new boolean[m];
        boolean[] col = new boolean[n];

        //找到数组中为0的那一行或列
        for(int i = 0;i < m;i ++){
            for(int j = 0;j < n;j ++){
                if(matrix[i][j] == 0){
                    row[i] = true;
                    col[j] = true;
                }
            }
        }

        //将为0的那一行或列置为0
        for(int i = 0;i < m;i ++){
            for(int j = 0;j < n;j ++){
                if(row[i] || col[j]){
                    matrix[i][j] = 0;
                }
            }
        }


    }
}

二、题目2-字母异位词分组

1.题目描述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.思路与代码

2.1 思路

1.先判断输入的字符数组是否为空或者字符数组长度为0,如果是,则输出一个空数组

2.创建一个HashMap集合,

3.遍历字符,先将字符转为字符数组,在将字符数组进行排序,接着将该字符数组重新转为字符串s

4.判断s是否已经在HashMap集合中,若不存在,则将其作为key,创建数组,一同加入HashMap集合中;若已经存在,则将i处位置的字符串加入到Key为s的集合中的数组中

5.输出

2.2 代码

代码如下(示例):

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //判断数组是否为空或者数组长度是否为0
        if(strs == null || strs.length == 0){
            return new ArrayList<>();
        }

        //创建一个Map集合
        Map<String,List<String>> m = new HashMap<>();

        for(int i = 0;i < strs.length;i ++){
            //将字符转为字符数组
            char[] chars = strs[i].toCharArray();

            //对字符数组进行排序
            Arrays.sort(chars);

            //将排序后的数组转为字符串
            String s = Arrays.toString(chars);

            //判断排序后字符是否已经在Map集合中出现
            if(!m.containsKey(s)){
                //如果没有出现,则创建其字符的Key和数组
                m.put(s,new ArrayList<>());
            }

            //如果字符已经出现,则将i处值加入key为字符的数组中
            m.get(s).add(strs[i]);

        }


        return new ArrayList<>(m.values());
    }
}


总结

提示:这里对文章进行总结:
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mikudd3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值