Java算法OJ(12)

news2025/3/17 5:22:11


目录

1.前言

2.正文

2.1Fib数列

2.2单词搜索

2.3杨辉三角

3.小结


1.前言

哈喽大家好吖,今天来分享几道的练习题,欢迎大家在评论区多多交流,废话不多说让我们直接开始吧。

2.正文

2.1Fib数列

题目:斐波那契数列_牛客题霸_牛客网


解法1:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int[] dp = new int[num + 1];
        dp[1] = 1;
        dp[2] = 1;
        for (int i = 3; i <= num; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        System.out.println(dp[num]);
    }
}
  • 时间复杂度:O(n),仅需一次遍历。

  • 空间复杂度:O(n),使用数组存储中间结果。

  • 优化空间:若只需最终结果,可用两个变量替代数组,将空间复杂度降至O(1)。

  • 注意事项:当num较大时,int可能溢出,可改用longBigInteger


解法2:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int first = 1;
        int second = 1;
        int temp;
        for (int i = 3; i <= num; i++) {
            temp = second;//先把变量second保存起来
            second = first + second;
            first = temp;
        }
        System.out.println(second);
    }
特性说明
时间复杂度O(n),与动态规划方法相同
空间复杂度O(1),仅需3个变量,远优于动态规划的O(n)
边界处理若输入 num = 1 或 2,直接输出初始值1,无需进入循环
溢出问题当 num 较大时,int 可能溢出,可改用 long 或 BigInteger

2.2单词搜索

题目:单词搜索_牛客题霸_牛客网


import java.util.*;

public class Solution {
    int[] dx = new int[]{-1, 1, 0, 0};
    int[] dy = new int[]{0, 0, -1, 1};
    public boolean exist (String[] board, String word) {
        // write code here
        char[][] grid = new char[board.length][board[0].length()];
        for(int i = 0; i < board.length; i++){
            grid[i] = board[i].toCharArray();
        }
        boolean[][] visited = new boolean[grid.length][grid[0].length];
        for(int i = 0; i < grid.length; i++){
            for(int j = 0; j < grid[0].length; j++){
                if(word.charAt(0) == grid[i][j]){
                    if(dfs(grid, word, 0, i, j, visited)) return true;
                }
            }
        }
        return false;
    }
    
    private boolean dfs(char[][] grid, String word, int depth, int x, int y, boolean[][] visited) {
        // 所有字符判断完了,返回true
        if(depth == word.length()) {
            return true;
        }
        // 越界或访问过或字符不等,返回false
        if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || visited[x][y] || grid[x][y] != word.charAt(depth)){
            return false;
        }
        // 尝试4个方向,有一个成功就行
        visited[x][y] = true;
        for(int i = 0; i < 4; i++){
            if(dfs(grid, word, depth + 1, x + dx[i], y + dy[i], visited)){
                return true;
            }
        }
        // 回溯
        visited[x][y] = false;
        return false;
    }
}

1. 输入处理

  • 将输入的字符串数组 board 转换为二维字符数组 grid,便于后续操作。

  • 初始化一个与 grid 大小相同的 visited 数组,用于标记已访问的单元格。


2. 深度优先搜索(DFS)

  • 目标:从矩阵的每个单元格出发,尝试匹配单词的每个字符。

  • 步骤

    1. 起点选择:遍历矩阵的每个单元格,如果当前单元格的字符与单词的第一个字符匹配,则从该位置开始 DFS。

    2. 递归匹配

      • 如果当前字符匹配,标记该单元格为已访问。

      • 向四个方向(上下左右)递归搜索下一个字符。

      • 如果某个方向匹配成功,返回 true

    3. 回溯

      • 如果当前路径无法匹配完整单词,撤销当前单元格的访问标记(visited[x][y] = false),并返回 false


3. 边界条件

  • 成功条件:递归深度等于单词长度时,说明单词已完全匹配,返回 true

  • 失败条件

    • 当前单元格越界。

    • 当前单元格已访问过。

    • 当前单元格字符与单词的当前字符不匹配。

2.3杨辉三角

题目:杨辉三角_牛客题霸_牛客网

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[][] array=new int[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<=i;j++){
                if(j==0||j==i){
                    array[i][j]=1;
                }else{
                    array[i][j]=array[i-1][j-1]+array[i-1][j];
                }
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<=i;j++){
                System.out.printf("%5d",array[i][j]);
            }
            System.out.println();
        }
    }
}
  1. 输入处理

    • 读取用户输入的整数 n,表示要生成的杨辉三角的行数。

    • 创建一个大小为 n x n 的二维数组 array

  2. 填充杨辉三角

    • 使用双重循环遍历每一行和每一列。

    • 根据杨辉三角的性质,计算每个位置的值:

      • 如果是行的开头或结尾,直接赋值为 1

      • 否则,等于其左上方和右上方数字之和。

  3. 打印杨辉三角

    • 使用双重循环遍历数组,格式化输出每个数字。

    • 每行结束后换行。

3.小结

今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,大家加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2316415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MrRobot靶机详细解答

一、主机发现 arp-scan -l二、端口扫描、目录枚举、指纹识别 2.1端口扫描 nmap -p- 192.168.55.147发现22端口关闭&#xff0c;且无其它特殊端口&#xff0c;只能去网页中寻找信息 2.2目录枚举 dirb http://192.168.55.1472.3指纹识别 nmap 192.168.55.147 -sV -sC -O --…

java线性表(单向链表)

对于链表我们有很多种&#xff0c;有带头和不带头&#xff0c;双向和单项&#xff0c;循环和不循环。 我们实现的单向链表是不带头单向不循环链表。 链表不比顺序表&#xff0c;它可以连续也可以不连续&#xff0c;是链子型的每条链子两边都有节点&#xff08;除首尾)。 单向…

QT:动态属性和对象树

动态对象 1.添加Q_PROPERTY对象 #ifndef MYPROPERTYCLASS_H #define MYPROPERTYCLASS_H#include <QObject>class MyPropertyClass : public QObject {Q_OBJECTQ_PROPERTY(QString mask READ mask WRITE setMask NOTIFY maskChanged) public:explicit MyPropertyClass(Q…

PH热榜 | 2025-03-16

1. BrowserAgent 标语&#xff1a;基于浏览器的人工智能代理 - 无限使用&#xff0c;固定费用 介绍&#xff1a;在您的浏览器中直接创建和运行AI工作流程&#xff0c;无需支付API费用。我们的可视化编辑器不需要编写代码&#xff0c;同时我们的浏览器本地技术支持以固定价格进…

关于进程的实验(子进程和父进程相关的)

文章目录 1.第一个问题2.第二个问题3.第三个问题 1.第一个问题 编写一段程序&#xff0c;利用系统调用fork( )创建两个进程。当此程序运行时&#xff0c;在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符&#xff1a;父进程显示字符“a”;子进程分别显…

《基于视频监控的智能跌倒检测系统》开题报告

一、本课题研究目标 本课题旨在研究并实现一个基于视频监控的智能跌倒检测系统&#xff0c;以有效识别老年人或需特殊照顾人群的跌倒事件&#xff0c;并实现自动报警功能。具体而言&#xff0c;该系统将通过机器学习和深度学习技术&#xff0c;对视频数据中的行为模式进行分析&…

SonarQube安装及结合IDEA使用详细教程(2025适配版)

一、环境验证与准备 JDK版本确认 PS C:\> java -version openjdk version "17.0.14" 2025-01-21 LTS OpenJDK Runtime Environment Zulu17.5615-CA (build 17.0.147-LTS) OpenJDK 64-Bit Server VM Zulu17.5615-CA (build 17.0.147-LTS)安装路径说明 主程序路径&a…

2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题E卷

目录 总体规划 模块二:设备基础信息配置 模块三:网络搭建与网络冗余备份方案部署 模块四:移动互联网搭建与网优 模块五:出口安全防护与远程接入 总体规划 医院在进行网络部分信息化建设方案设计过程中,需要保证医院、血液中心通过社保网进行互连互通,同时满足献血中心与医…

vue echarts封装使用

echarts 尺寸自动调节 resize.js 柱状图 components/dashboard/lineChart.vue <template><div :class"className" :style"{height:height,width:width}" /> </template><script> import echarts from echarts require(echarts/…

PTP协议赋能高精度时间同步网络

什么是PTP&#xff1f; PTP&#xff08;精确时间协议&#xff0c;Precision Time Protocol&#xff09; 是一种基于IEEE 1588标准的网络时间同步协议&#xff0c;旨在为分布式系统中的设备提供亚微秒级&#xff08;甚至纳秒级&#xff09;的高精度时钟同步。其核心目标是通过消…

使用WireShark解密https流量

概述 https协议是在http协议的基础上&#xff0c;使用TLS协议对http数据进行了加密&#xff0c;使得网络通信更加安全。一般情况下&#xff0c;使用WireShark抓取的https流量&#xff0c;数据都是加密的&#xff0c;无法直接查看。但是可以通过以下两种方法&#xff0c;解密抓…

MIDI,AI 3D场景生成技术

MIDI&#xff08;Multi-Instance Diffusion for Single Image to 3D Scene Generation&#xff09;是先进的3D场景生成技术&#xff0c;能在短时间内将单张图像转化为高保真度的3D场景。通过智能分割输入图像&#xff0c;识别出场景中的独立元素&#xff0c;再基于多实例扩散模…

allWebPlugin中间件自动适应Web系统多层iframe嵌套

应用背景 在Web项目集成开发中&#xff0c;经常遇到主页面嵌套iframe&#xff0c;甚至iframe内部页面嵌套iframe的应用场景。笔者在某大型招投标项目应用中就遇到这种应用。为了降低用户原有应用系统集成难度&#xff0c;实现无感集成&#xff0c;allWebPlugin中间件实现自动适…

Spring boot3-Http Interface: 声明式编程

来吧 1.首先引入pom.xml依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 2.创建WebClientController控制器 import com.atguigu.boot3_07_http.serv…

【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 C学习笔记&#xff1a; https://blog.csdn.net/djdjiejsn/category_12682189.html 前言&#xff1a; 在C语…

C语言实现冒泡排序,超详解

引言 用c语言实现使用冒泡排序 一、什么是冒泡排序 冒泡排序是一种简单的排序算法 基本原理 冒泡排序的基本思想是通过对数组中相邻元素的比较和交换&#xff0c;将最大&#xff08;或最小&#xff09;的元素逐步 “冒泡” 到数组的末尾&#xff08;或开头&#xff09;。它重…

Flutter——Android与Flutter混合开发详细教程

目录 1.创建FlutterModule项目&#xff0c;相当于Android项目里面的module库&#xff1b;2.或者编辑aar引用3.创建Android原生项目3.直接运行跑起来 1.创建FlutterModule项目&#xff0c;相当于Android项目里面的module库&#xff1b; 2.或者编辑aar引用 执行 flutter build a…

沐数科技数据开发岗笔试题2025

描述性统计 标准差 答案: A 解析: 标准差 衡量数据集中数值变化或离散程度的一种度量。它反映了数据集中的各个数值与数据集的平均值&#xff08;均值&#xff09;之间的偏离程度。标准差越大&#xff0c;表明数据的分布越分散&#xff1b;标准差越小&#xff0c;表明数据…

【eNSP实战】配置Easy IP

拓图 要求&#xff1a; 在AR1配置Easy IP策略实现内网可以访问Internet主机IP如图所示&#xff0c;这里不做展示 AR1接口配置 interface GigabitEthernet0/0/0ip address 192.168.0.1 255.255.255.0 # interface GigabitEthernet0/0/1ip address 10.0.1.1 255.255.255.0 …

让双向链表不在云里雾里

又来博客留下我的足迹了&#xff0c;哈哈哈&#xff0c;这次是对于双向链表的理解 目录 创建双向链表&#xff1a; 申请结点&#xff1a; 双向链表初始化&#xff1a; 双向链表插入结点&#xff1a; 双向链表删除结点&#xff1a; 双向链表的打印&#xff1a; 双向链表…