面试经典150题(88-89)
leetcode 150道题 计划花两个月时候刷完,今天(第四十四天)完成了2道(88-89)150:
88.(22. 括号生成) 题目描述:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
第一版(没通过,我想法是 ()的全排列然后找出来符合的并且去重。。超时了)
class Solution {List<String> res=new ArrayList();Set<String> set=new HashSet();public List<String> generateParenthesis(int n) {if(n<1){return res;}StringBuilder sb=new StringBuilder();for(int i=0;i<n;i++){sb.append("()");}boolean[] used=new boolean[n*2];generateCore(sb.toString(),new StringBuilder(),used);return res;}public void generateCore(String str,StringBuilder sb,boolean[] used){if(sb.length()==str.length()){ if(check(sb.toString())&&set.add(sb.toString())){res.add(sb.toString()); }return ;}for(int i=0;i<str.length();i++){if(used[i]){continue;}sb.append(str.charAt(i));used[i]=true;generateCore(str,sb,used);used[i]=false;sb.deleteCharAt(sb.length()-1);}}public boolean check(String str){Stack<Character> stack=new Stack();for(char ch:str.toCharArray()){if(ch=='('){stack.push(ch);}else{if(stack.isEmpty()){return false;}stack.pop();}}return stack.isEmpty();}
}
第二版(看了解题)
class Solution {List<String> res=new ArrayList();public List<String> generateParenthesis(int n) {if(n<1){return res;}generateCore(new StringBuilder(),n,n);return res;}public void generateCore(StringBuilder sb,int left,int right){//左边和右边剩余的括号数都等于 0 的时候结算。if(left==0&&right==0){ res.add(sb.toString());return ;}//产生左分支的时候,只看当前是否还有左括号可以使用;if(left>0){sb.append("(");generateCore(sb,left-1,right);sb.deleteCharAt(sb.length()-1);}//产生右分支的时候,还受到左分支的限制,//右边剩余可以使用的括号数量一定得在严格大于左边剩余的数量的时候if(right>0&&right>left){sb.append(")");generateCore(sb,left,right-1);sb.deleteCharAt(sb.length()-1);}}
}
89.(79. 单词搜索)题目描述:
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true
第一版(没超时,但是效率垫底,还没来得及看解题。。)
class Solution {public boolean exist(char[][] board, String word) {for(int i=0;i<board.length;i++){for(int j=0;j<board[i].length;j++){if(board[i][j]==word.charAt(0)){boolean[][] used=new boolean[board.length][board[0].length];if(dfs(board,word,i,j,new StringBuilder(),used)){return true;}}}}return false;}public boolean dfs(char[][] board, String word,int mIndex,int nIndex,StringBuilder sb,boolean[][] used) {int m=board.length;int n=board[0].length;if(mIndex<0||mIndex>=m){return false;}if(nIndex<0||nIndex>=n){return false;}if(used[mIndex][nIndex]){return false;}sb.append(board[mIndex][nIndex]);used[mIndex][nIndex]=true;if(sb.length()>word.length()){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]=false;return false;}else if(sb.length()==word.length()){if(word.equals(sb.toString())){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]=false;return true;}else{sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]=false;return false;}}else{if(!word.substring(0,sb.length()).equals(sb.toString())){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]=false;return false;}}boolean flag=dfs(board, word, mIndex + 1, nIndex, sb, used) ||dfs(board, word, mIndex - 1, nIndex, sb, used) ||dfs(board, word, mIndex, nIndex + 1, sb, used) ||dfs(board, word, mIndex, nIndex - 1, sb, used);if(!flag){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]=false;}return flag;}
}
难啊!!!咋这么难这块。。。后面还有动态规划我咋办。。
加油吧,早日跳槽!!!
-----2024.01.18 看了一下 89.(79. 单词搜索)的解题,发现不需要用 String Builder 去记录遍历的过的字符合只需要每次去将当前遍历和要搜索的对比就行。改了一下效率立马就上去。。
第二版(看了解题)
class Solution {public boolean exist(char[][] board, String word) {boolean[][] used=new boolean[board.length][board[0].length];for(int i=0;i<board.length;i++){for(int j=0;j<board[i].length;j++){if(board[i][j]==word.charAt(0)){if(dfs(board,word,i,j,0,used)){return true;}}}}return false;}public boolean dfs(char[][] board, String word,int mIndex,int nIndex,int index,boolean[][] used) {if(index>=word.length()){return true;}int m=board.length;int n=board[0].length;if(mIndex<0||mIndex>=m){return false;}if(nIndex<0||nIndex>=n){return false;}if(used[mIndex][nIndex]){return false;}if(board[mIndex][nIndex]!=word.charAt(index)){return false;}used[mIndex][nIndex]=true;boolean flag=dfs(board, word, mIndex + 1, nIndex, index+1, used)||dfs(board, word, mIndex - 1, nIndex, index+1, used)||dfs(board, word, mIndex, nIndex + 1, index+1, used)||dfs(board, word, mIndex, nIndex - 1, index+1, used);if(flag){return flag;}used[mIndex][nIndex]=false;return flag;}
}
真的牛皮,今天太累了偷懒一天!!!
相关文章:
面试经典150题(88-89)
leetcode 150道题 计划花两个月时候刷完,今天(第四十四天)完成了2道(88-89)150: 88.(22. 括号生成) 题目描述: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效…...
【设计模式-3.3】结构型——享元模式
说明:说明:本文介绍设计模式中结构型设计模式中的,享元模式; 游戏地图 在一些闯关类的游戏,如超级玛丽、坦克大战里面,游戏的背景每一个关卡都不相同,但仔细观察可以发现,其都是用…...
【征服redis6】Redis的内存淘汰详解
目录 1.redis的基本策略 2.Redis中的缓存淘汰策略 3.Redis内存不足的情况 4.几种淘汰策略的实现原理 5.项目实践与优化策略 5.1 配置案例 5.2 项目优化策略参考 数据库存储会将数据保存到磁盘中,而Redis的核心数据是在内存中的,而Redis本身主要用来…...
多文件转二维码的两种方式,有兴趣的了解一下
多个文件能一键生成二维码吗?二维码是现在很多人用来展示文件内容的一种手段,在制作二维码图片之后,其他人扫码就可以查看文件或者下载文件,有效的提升文件获取的效率。一般情况下,文件二维码分为多个文件生成一个二维…...
uniapp APP接入Paypal
1. 登录paypal开发者中心, 2. 选择 Apps & Credentials 点击 Create App创建应用,创建后点击编辑按钮,如图: 3. 进入应用详情,勾选Log in with PayPal点击 Advanced Settings 添加return URL等信息并保存。如图&a…...
QT-贪吃小游戏
QT-贪吃小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "Snake.h" #include "Food.h" #include "Stone.h" #include "Mushroom.h" #include "Ai.h" #include "Game.h" #inclu…...
HubSpot:如何设计和执行客户旅程?
在当今数字化时代,企业成功的关键之一是建立并优化客户旅程。HubSpot作为一体化市场营销平台,通过巧妙设计和执行客户旅程,实现了个性化决策,关键节点的精准引导,为企业带来了数字化转型的引领力。 一、HubSpot是如何设…...
【Go学习】macOS+IDEA运行golang项目,报command-line-arguments,undefined
写在前面的话:idea如何配置golang,自行百度 问题1:通过idea的terminal执行go test报错 ✘ xxxxxmacdeMacBook-Pro-3 /Volumes/mac/.../LearnGoWithTests/hello go test go: go.mod file not found in current directory or any parent …...
优先看我的博客:工控机 Ubuntu系统 输入密码登录界面后界面模糊卡死,键盘鼠标失效(不同于其他博主的问题解决方案,优先看我的博客。)
工控机Ubuntu 输入密码登录界面后界面模糊卡死,键盘鼠标失效 (不同于其他博主的问题解决方案,工控机Ubuntu的系统 优先看我的博客。) 系统版本:ubuntu18.04 主机:工控机 应用场景:电力系统巡…...
SAP 中的外部接口:预扣税
文章目录 1 Introduction2 implementation3 Summary 1 Introduction We use BP create WTAX_TYPE ,I don’t find a bapi. We will update for it . We will impement WTax type , WTax code ,Subject in the ‘BP’. 2 implementation UPDATE lfbw SET witht gs_alv-wit…...
代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
669. 修剪二叉搜索树 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:如果当前结点小于所给区间,那该节点及其左子树肯定不符合条件,返回其右子树作为上一结点子树;反之…...
设计模式——解释器模式
解释器模式(Interpreter Pattern)是一种行为型设计模式,它提供了一个框架,用于定义语言的语法规则,并通过这些规则来解析和解释特定语法结构表示的句子。这种模式主要应用于需要对简单语言进行解释或编译的小型系统中。…...
uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义
使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 <scroll-view class"contentshow" scroll-y :show-scrollbartrue :enhancedtrue><view class"content" :show-scrollbartrue><text>{{vehicleCartinfo}}<…...
开源28181协议视频平台搭建流程
最近项目中用到流媒体平台,java平台负责信令部分,c平台负责流媒体处理,找了评分比较好的开源项目 https://gitee.com/pan648540858/wvp-GB28181-pro 流媒体服务基于 c写的 https://github.com/ZLMediaKit/ZLMediaKit 说明文档:h…...
安全跟我学|网络安全五大误区,你了解吗?
网络安全 尽管安全问题老生常谈,但一些普遍存在的误区仍然可能让企业随时陷入危险境地。为了有效应对当前层出不穷且不断变换的网络威胁,最大程度规避潜在风险,深入了解网络安全的发展趋势必不可少。即使部署了最新且最先进的硬件和解决方案…...
数据结构奇妙旅程之二叉树初阶
꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …...
WebGL中开发VR(虚拟现实)应用
WebGL(Web Graphics Library)是一种用于在浏览器中渲染交互式3D和2D图形的JavaScript API。要在WebGL中开发VR(虚拟现实)应用程序,您可以遵循以下一般步骤,希望对大家有所帮助。北京木奇移动技术有限公司&a…...
elemeentui el-table封装
elemeentui el-table封装 <template><div style"height: 100%;"><el-table ref"sneTable" element-loading-text"加载中" element-loading-spinner"el-icon-loading"element-loading-background"rgba(45,47,79…...
openssl3.2 - 官方demo学习 - guide - quic-client-block.c
文章目录 openssl3.2 - 官方demo学习 - guide - quic-client-block.c概述笔记END openssl3.2 - 官方demo学习 - guide - quic-client-block.c 概述 在程序运行时, 要指定环境变量 SSL_CERT_FILErootcert.pem, 同时将rootcert.pem拷贝到工程目录下, 否则不好使 吐槽啊, 为啥不…...
滑动窗口经典入门题-——长度最小子数组
文章目录 算法原理题目解析暴力枚举法的代码优化第一步初始化第二步right右移第三步left右移 滑动窗口法的代码 算法原理 滑动窗口是一种在序列(例如数组或链表)上解决问题的算法模式。它通常用于解决子数组或子字符串的问题,其中滑动窗口表示…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
