Java算法OJ(12)

目录
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可能溢出,可改用long或BigInteger。
解法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 herechar[][] 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) {// 所有字符判断完了,返回trueif(depth == word.length()) {return true;}// 越界或访问过或字符不等,返回falseif(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)
目标:从矩阵的每个单元格出发,尝试匹配单词的每个字符。
步骤:
起点选择:遍历矩阵的每个单元格,如果当前单元格的字符与单词的第一个字符匹配,则从该位置开始 DFS。
递归匹配:
如果当前字符匹配,标记该单元格为已访问。
向四个方向(上下左右)递归搜索下一个字符。
如果某个方向匹配成功,返回
true。回溯:
如果当前路径无法匹配完整单词,撤销当前单元格的访问标记(
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();}}
}
输入处理:
读取用户输入的整数
n,表示要生成的杨辉三角的行数。创建一个大小为
n x n的二维数组array。填充杨辉三角:
使用双重循环遍历每一行和每一列。
根据杨辉三角的性质,计算每个位置的值:
如果是行的开头或结尾,直接赋值为
1。否则,等于其左上方和右上方数字之和。
打印杨辉三角:
使用双重循环遍历数组,格式化输出每个数字。
每行结束后换行。
3.小结
今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,大家加油!
相关文章:
Java算法OJ(12)
目录 1.前言 2.正文 2.1Fib数列 2.2单词搜索 2.3杨辉三角 3.小结 1.前言 哈喽大家好吖,今天来分享几道的练习题,欢迎大家在评论区多多交流,废话不多说让我们直接开始吧。 2.正文 2.1Fib数列 题目:斐波那契数列_牛客题霸…...
MrRobot靶机详细解答
一、主机发现 arp-scan -l二、端口扫描、目录枚举、指纹识别 2.1端口扫描 nmap -p- 192.168.55.147发现22端口关闭,且无其它特殊端口,只能去网页中寻找信息 2.2目录枚举 dirb http://192.168.55.1472.3指纹识别 nmap 192.168.55.147 -sV -sC -O --…...
java线性表(单向链表)
对于链表我们有很多种,有带头和不带头,双向和单项,循环和不循环。 我们实现的单向链表是不带头单向不循环链表。 链表不比顺序表,它可以连续也可以不连续,是链子型的每条链子两边都有节点(除首尾)。 单向…...
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…...
编程语言的几种常见的分类方法
一、 按照编程范式分类 命令式编程语言 强调通过语句来改变程序状态,如 C、Pascal、Fortran 等。 面向对象编程语言 基于对象和类的概念,支持封装、继承和多态,如 Java、C、Python、Ruby 等。 函数式编程语言 注重不可变性和纯函数…...
算法——层序遍历和中序遍历构造二叉树
晴问 #include <iostream> #include <vector> #include <queue> #include <unordered_map>using namespace std;struct TreeNode {int data;TreeNode *left;TreeNode *right;TreeNode(int data) : data(data), left(nullptr), right(nullptr) {} };//…...
中考英语之06语态(动词语态-简单)
1 主动语态和被动语态 在初中英语中,语态是动词的一种形式,用于说明主语与谓语动词之间的关系,主要有主动语态和被动语态两种。 1.1 主动语态 定义:表示主语是动作的执行者。结构:主语 谓语(及物动词&a…...
linux常用基础命令_最新
常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…...
PH热榜 | 2025-03-16
1. BrowserAgent 标语:基于浏览器的人工智能代理 - 无限使用,固定费用 介绍:在您的浏览器中直接创建和运行AI工作流程,无需支付API费用。我们的可视化编辑器不需要编写代码,同时我们的浏览器本地技术支持以固定价格进…...
《论语别裁》第01章 学而(27) 无所适从的礼俗
下面讲做学问的态度。 有子曰:礼之用,和为贵,先王之道,斯为美,小大由之;有所不行,知和而和,不以礼节之,亦不可行也。 为什么讲学问讲到礼?这个礼,…...
关于进程的实验(子进程和父进程相关的)
文章目录 1.第一个问题2.第二个问题3.第三个问题 1.第一个问题 编写一段程序,利用系统调用fork( )创建两个进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显…...
《基于视频监控的智能跌倒检测系统》开题报告
一、本课题研究目标 本课题旨在研究并实现一个基于视频监控的智能跌倒检测系统,以有效识别老年人或需特殊照顾人群的跌倒事件,并实现自动报警功能。具体而言,该系统将通过机器学习和深度学习技术,对视频数据中的行为模式进行分析&…...
Flask中的装饰器
在 Flask 中,装饰器(Decorator)是一种 Python 语法特性,它允许你在不修改原始函数的情况下,扩展其功能。Flask 使用装饰器来定义路由、请求前后钩子、中间件等。 1. Flask 装饰器的基本概念 Python 的装饰器本质上是一…...
MySQL配置文件my.cnf详解
目前使用的服务器系统是CentOS8.5 ,针对MySql8.4的配置示例,自己根据实际情况修改。 安装MySql8.4时,MySql8.4没有默认的my.cnf,需要用户根据需要自行配置my.cnf文件,大概可看到下面这样的参数列表,可能不同版本的mysql参数多少会…...
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卷
目录 总体规划 模块二:设备基础信息配置 模块三:网络搭建与网络冗余备份方案部署 模块四:移动互联网搭建与网优 模块五:出口安全防护与远程接入 总体规划 医院在进行网络部分信息化建设方案设计过程中,需要保证医院、血液中心通过社保网进行互连互通,同时满足献血中心与医…...
python列表基础知识
列表 创建列表 1.列表的定义:可变的,有序的数据结构,可以随时添加或者删除其中的元素 2.基本语法:字面量【元素1,元素2,元素3】使用[]创建列表 定义变量:变量名称【元素1,元素2&…...
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? PTP(精确时间协议,Precision Time Protocol) 是一种基于IEEE 1588标准的网络时间同步协议,旨在为分布式系统中的设备提供亚微秒级(甚至纳秒级)的高精度时钟同步。其核心目标是通过消…...
使用WireShark解密https流量
概述 https协议是在http协议的基础上,使用TLS协议对http数据进行了加密,使得网络通信更加安全。一般情况下,使用WireShark抓取的https流量,数据都是加密的,无法直接查看。但是可以通过以下两种方法,解密抓…...
MIDI,AI 3D场景生成技术
MIDI(Multi-Instance Diffusion for Single Image to 3D Scene Generation)是先进的3D场景生成技术,能在短时间内将单张图像转化为高保真度的3D场景。通过智能分割输入图像,识别出场景中的独立元素,再基于多实例扩散模…...
三分钟掌握视频剪辑 | 在 Rust 中优雅地集成 FFmpeg
前言 在当今的短视频时代,高效的视频剪辑已成为内容创作者和开发者的迫切需求。无论是裁剪视频开头结尾、提取高光时刻,还是制作 GIF、去除广告,剪辑都是必不可少的一环。 然而,批量处理大量视频并非易事,常见的挑战…...
Linux 快捷键 | 终端快捷键 / 键盘快捷键
注:本文为 “Linux 快捷键” 相关文章合辑。 英文引文,机翻未校。 未整理去重。 Linux 终端常用快捷键 组合键 ~~~~~~~ 功能描述Ctrl a光标移动到行首(Ahead of line),相当于通常的 Home 键Ctrl b光标往回 (Back…...
allWebPlugin中间件自动适应Web系统多层iframe嵌套
应用背景 在Web项目集成开发中,经常遇到主页面嵌套iframe,甚至iframe内部页面嵌套iframe的应用场景。笔者在某大型招投标项目应用中就遇到这种应用。为了降低用户原有应用系统集成难度,实现无感集成,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)
🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 C学习笔记: https://blog.csdn.net/djdjiejsn/category_12682189.html 前言: 在C语…...
C语言实现冒泡排序,超详解
引言 用c语言实现使用冒泡排序 一、什么是冒泡排序 冒泡排序是一种简单的排序算法 基本原理 冒泡排序的基本思想是通过对数组中相邻元素的比较和交换,将最大(或最小)的元素逐步 “冒泡” 到数组的末尾(或开头)。它重…...
Flutter——Android与Flutter混合开发详细教程
目录 1.创建FlutterModule项目,相当于Android项目里面的module库;2.或者编辑aar引用3.创建Android原生项目3.直接运行跑起来 1.创建FlutterModule项目,相当于Android项目里面的module库; 2.或者编辑aar引用 执行 flutter build a…...
沐数科技数据开发岗笔试题2025
描述性统计 标准差 答案: A 解析: 标准差 衡量数据集中数值变化或离散程度的一种度量。它反映了数据集中的各个数值与数据集的平均值(均值)之间的偏离程度。标准差越大,表明数据的分布越分散;标准差越小,表明数据…...
【eNSP实战】配置Easy IP
拓图 要求: 在AR1配置Easy IP策略实现内网可以访问Internet主机IP如图所示,这里不做展示 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 …...
