牛客刷题篇——剑指offer (第二期)

简介: 牛客刷题篇——剑指offer (第二期)

JZ12 矩阵中的路径🥣

矩阵中的路径_牛客题霸_牛客网 (nowcoder.com)

题目描述🥣


1c551d97b90949f7af60d049140921fb.png

解题思路🥣

这道题是一道标准的dfs例题


通用板子如下!


 if 满足结束条件:

       result.add(路径)

       return

 

   for 选择 in 选择列表:

       做选择

       backtrack(路径, 选择列表)

       撤销选择


因为是一个二维矩阵 首先两层for循环 遍历全部的点


接着就是最重要的dfs函数


一个点向周围四个地方递归


递归之后再把当前的坐标复原


代码详解🥣

import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix char字符型二维数组 
     * @param word string字符串 
     * @return bool布尔型
     */
    public boolean hasPath (char[][] matrix, String word) {
        char worlds[]= word.toCharArray();
        for(int i=0;i<matrix.length;i++){
            for( int j=0;j<matrix[0].length;j++){
                if(dfs(matrix,worlds,i,j,0))
                    return true;
            }
        }
        return false;
        // write code here
    }
    boolean dfs(char[][] matrix,char []world , int i,int j,int index){
        //处理边界问题 index表示的是查找到字符串word的第几个字符,
        if(i>=matrix.length||i<0||j>=matrix[0].length||j<0||matrix[i][j]!=world[index])
        return false;
        //如果world 每个字符串都找到了 直接return true
        if(index==world.length-1)
            return true;
        char temp=matrix[i][j]; //把走过的坐标标记下来 最后输出
        //修改当前坐标的值
        matrix[i][j]=' ';
        //从当前坐标的上下左右四个方向去寻找 递归
        boolean res=dfs(matrix,world,i+1,j,index+1)|| //向右递归
            dfs(matrix,world,i-1,j,index+1)||//向左递归
            dfs(matrix,world,i,j-1,index+1)||//向下递归
            dfs(matrix,world,i,j+1,index+1);//向上递归
            //递归后再把当前坐标复原
            matrix[i][j]=temp;
            return res;
    }

4ce7d1dd75cc4ab1ac4560ac53d0e17f.png


过辣~

JZ16 数值的整数次方🥣

数值的整数次方_牛客题霸_牛客网 (nowcoder.com)

题目描述🥣

580629610630492787290fee204ed09c.png

解题思路🥣

  • 先处理次方数为负数的情况,将底数化为分数解决。
  • 遍历次方数的次数,不断累乘底数。

代码详解🥣

import java.util.*;
public class Solution {
    public double Power(double base, int exponent) {
        //先处理次方数是负数的情况
        if(exponent<0){
            base=1/base;
            exponent=-exponent;
        }
        double ret=1.0;
        for(int i=0;i<exponent;i++){
            ret*=base;
        }
        return ret;
  }
}


一声清脆的声音 过过辣

JZ40 最小的K个数🥣

最小的K个数_牛客题霸_牛客网 (nowcoder.com)

题目描述🥣

def94b6428d24c3f836738e2709ab503.png

解题思路🥣

这道题直接用java 自带的排序函数 Arrays.sort()

代码详解🥣

import java.util.*;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> list =new ArrayList<>();
        //特判k=0时 直接返回
        if(k==0) return list;
        Arrays.sort(input);//将数组从小到大升序排列 去最前面k个即可
        for(int i=0;i<k;i++){
            list.add(input[i]);
        }
        return list;
    }
}



相关文章
|
前端开发
canvas生成自定义大小图片
canvas生成自定义大小图片
|
大数据
《大数据之路:阿里巴巴大数据实践》| 每天读本书
本书是为了满足不断变化的业务需求,同时实现系统的高度扩展性、灵活性以及数据展现的高性能而设计的。
4213 0
|
供应链 区块链
探索区块链技术在供应链管理中的应用与挑战
本文深入探讨了区块链技术在现代供应链管理中的创新应用及其面临的挑战。通过分析区块链的去中心化特性、不可篡改性以及透明度,阐述了如何利用这一技术优化供应链流程,提高数据共享的安全性与效率。同时,文章也指出了实施过程中的技术难题、成本考量及法规限制等挑战,为读者提供了对区块链技术在供应链领域应用前景的全面认识。
|
Rust 安全 Java
Java Stream 使用指南
本文介绍了Java中Stream流的使用方法,包括如何创建Stream流、中间操作(如map、filter、sorted等)和终结操作(如collect、forEach等)。此外,还讲解了并行流的概念及其可能带来的线程安全问题,并给出了示例代码。
815 0
|
机器学习/深度学习
填补AlphaFold3空白,字节跳动提出物理引导的方法让蛋白质动起来
【6月更文挑战第8天】字节跳动研究人员推出ConfDiff,一种融合物理引导的蛋白质构象生成方法,弥补AlphaFold3在动态构象生成上的不足。ConfDiff结合力引导网络和数据驱动模型,提高生成构象的真实性和准确性。实验显示,它在预测准确性和多样性上超越现有方法,助力蛋白质功能理解与药物研发。然而,高计算成本和泛化能力限制仍是挑战。论文链接:http://arxiv.org/abs/2403.14088
323 9
|
算法 安全 Java
技术笔记:MD5加密算法详解
技术笔记:MD5加密算法详解
|
存储 消息中间件 缓存
我们需要安装`websockets`库(如果尚未安装)
我们需要安装`websockets`库(如果尚未安装)
|
Ubuntu 开发工具 git
rk3588 镜像构建环境搭建基于docker
构建镜像环境搭建过程
1035 1
|
存储 运维 容灾
打造具备极致容灾能力的对象存储
本文介绍本地冗余,做了哪些容灾设计、应对AZ故障的ZRS(同城冗余)产品的容灾设计以及应对Region故障的跨区域复制功能。
20583 2
打造具备极致容灾能力的对象存储