leetcode算法题解(Java版)-10-全排列(递归)

简介:

一、二维数据

题目描述

You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
思路

  • 最简单的方法就是在开一个新二维数组tem,然后实行“旋转操作”
  • 这样,不符合题意!要在同一个数组中进行!

代码

public class Solution {
    public void rotate(int[][] matrix) {
        int [][] tem=new int [matrix.length][matrix.length];
        for(int i=0;i<tem.length;i++){
            for(int j=0;j<tem.length;j++){
                tem[j][tem.length-1-i]=matrix[i][j];
            }
        }
        for(int i=0;i<tem.length;i++){
            for(int j=0;j<tem.length;j++){
                matrix[i][j]=tem[i][j];
            }
        }
    }
}

思路二

  • 画一条从左上角到右下角的对角线,这时候矩阵被分成了两份,然后将左下角那部分和右上角那部分的处于对称位置的对调。
  • 然后将列水平对称位置对调,即为所求!
  • 听着有点懵的话,不妨在纸上试试。

代码

public class Solution {
    public void rotate(int[][] matrix) {
        int len=matrix.length;
        int tem;
        for(int i=0;i<len;i++){
            for(int j=0;j<i;j++){
                tem=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=tem;
            }
        }
        for(int i=0;i<len;i++){
            for(int j=0;j<len/2;j++){
                tem=matrix[i][j];
                matrix[i][j]=matrix[i][len-1-j];
                matrix[i][len-1-j]=tem;
            }
        }
    }
}

二、全排列(深搜)

题目描述

Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]have the following permutations:
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2], and[3,2,1].

思路

  • 找全排列,典型的深搜题。
  • 语法点:res.add(new ArrayList<Integer>(list));不要忘了加new ArrayList<Integer>不加就通过不了,虽然不明白为什么要加上。

代码


import java.util.ArrayList;
public class Solution {
    public ArrayList<ArrayList<Integer>> permute(int[] num) {
        ArrayList<ArrayList<Integer>> res=new ArrayList<>();
        int len=num.length;
        if(num==null||len==0){
            return res;
        }
        boolean [] visit=new boolean [len];
        ArrayList<Integer> list=new ArrayList<>();
        dfs(num,list,visit,res);
        return res;
    }
    public void dfs(int [] num,ArrayList<Integer> list,boolean [] visit,ArrayList<ArrayList<Integer>> res){
        if(list.size()==num.length){
            res.add(new ArrayList<Integer>(list));
            return ;
        }
        for(int i=0;i<num.length;i++){
            if(!visit[i]){
                visit[i]=true;
                list.add(num[i]);
                dfs(num,list,visit,res);
                list.remove(list.size()-1);
                visit[i]=false;
            }
        }
    }
}

这道全排列的题,还有扩展,明天接着搞~~

目录
相关文章
|
11天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
26 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
2天前
|
Java C语言
详解java方法与递归
详解java方法与递归
9 3
|
2天前
|
Java
java中递归实例
java中递归实例
12 0
|
2天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
8 4
|
2天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
9 1
|
3天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
20 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
3天前
|
算法
leetcode代码记录(二叉树递归遍历
leetcode代码记录(二叉树递归遍历
6 0
|
5天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
16 0
|
12天前
|
自然语言处理 Java 编译器
【Java探索之旅】方法重载 递归
【Java探索之旅】方法重载 递归
10 0
|
16天前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
14 0