> 文章列表 > JAVA练习61-矩阵置零、字母异位词分组

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

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

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

目录

前言

一、题目1-矩阵置零

1.题目描述

2.思路与代码

2.1 思路

2.2 代码 

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

1.题目描述

2.思路与代码

2.1 思路

2.2 代码

总结


前言

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

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的那一行或列置为0for(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) {//判断数组是否为空或者数组长度是否为0if(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());}
}

总结

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