- 📚 博客主页:⭐️这是一只小逸白的博客鸭~⭐️
- 👉 欢迎 关注❤️点赞👍收藏⭐️评论📝
- 😜 小逸白正在备战实习,经常更新面试题和LeetCode题解,欢迎志同道合的朋友互相交流~
- 💙 若有问题请指正,记得关注哦,感谢~
往期文章 :
目录
题目:
正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
提示:
1 <= n <= 8思路:
把
"("当成+1,")"当成-1,和为0且个数为2*n时即是答案
- 加入左括号,尝试每一种可能
- 加入右括号,尝试每一种可能
class Solution {
public:
vector<string> ans;
string cur;
int n;
char left = '(', right = ')';
vector<string> generateParenthesis(int n) {
this->n = n;
dfs(0, 0);
return ans;
}
void dfs(int count, int sum) {
// 如果个数超过2 * n or 左括号在前 or 右括号>n个 就不是有效括号组合
if(count > 2 * n || sum < 0 || sum > n) return ;
if(count == 2 * n && sum == 0) {
ans.emplace_back(cur);
return ;
}
// 尝试加入左括号
cur.push_back(left);
dfs(count + 1, sum + 1);
cur.pop_back();
// 尝试加入右括号
cur.push_back(right);
dfs(count + 1, sum - 1);
cur.pop_back();
}
};
题目:
给定一个字符串 s ,请将 s 分割成一些子串,使每个子串都是 回文串 ,返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例:
输入:s = “google”
输出:[[“g”,“o”,“o”,“g”,“l”,“e”],[“g”,“oo”,“g”,“l”,“e”],[“goog”,“l”,“e”]]
提示:
1 <= s.length <= 16s 仅由小写英文字母组成思路:
本题的递归树模型是一棵多叉树,图片来自力扣liweiwei1419大佬
如图所示
- 如果前缀字符串是回文,则可以产生分支和结点;
- 如果前缀字符串不是回文,则不产生分支和结点,这一步是剪枝操作。
在叶子结点是空字符串的时候结算,此时 从根结点到叶子结点的路径,就是结果集里的一个结果,使用深度优先遍历,记录下所有可能的结果。
class Solution {
public:
vector<vector<string>> ans;
vector<string> cur;
int n;
vector<vector<string>> partition(string s) {
n = s.length();
dfs(s, 0);
return ans;
}
void dfs(string& s, int index) {
// 到结尾查完了,将结果加入ans
if(index == n) {
ans.emplace_back(cur);
return ;
}
// 将从index开始的字符串都查一遍,是回文串的话就从下一个字符继续判断查找
for(int i = index; i < n; i++) {
if(isPalindrome(s, index, i)) {
cur.emplace_back(s.substr(index, i - index + 1));
dfs(s, i + 1);
cur.pop_back();
}
}
}
// 判断回文串
bool isPalindrome(string& s, int l, int r) {
while(l < r) {
if(s[l++] != s[r--]) return false;
}
return true;
}
};
题目:
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
示例:
输入:s = “25525511135”
输出:[“255.255.11.135”,“255.255.111.35”]
提示:
0 <= s.length <= 3000s 仅由数字组成思路:
本题的递归树模型是一棵多叉树,且深度为4,图片来自力扣liweiwei1419大佬
形成有效ip的条件:找到了4段Ip子段,且刚好遍历完字符串
剪枝:这个子段不符合[0, 255]or遍历完字符串但没找到四段ip 直接回溯
遇到首字符为0,把它单独为一个子段,继续遍历后序字符串
找到答案时将cur数组转成ip字符串,再加入ans
class Solution {
public:
vector<string> ans;
vector<int> cur;
int n;
vector<string> restoreIpAddresses(string s) {
n = s.length();
cur.resize(4, 0);
dfs(s, 0, 0);
return ans;
}
// 0 <= count < 4, 0 <= index < s.length()
// cur 记录每一个字段的值,count记录字段个数,index为字符串下标
void dfs(string& s, int count, int index) {
// 如果找到了4段Ip,且刚好遍历完字符串,就是一种答案
if(count == 4) {
if(index == n) {
string ip;
for(int i = 0; i < 4; i++) {
ip += to_string(cur[i]);
if(i != 3) ip += ".";
}
ans.emplace_back(ip);
}
return ;
}
// 如果还没找到4段Ip就遍历完字符串,提前回溯
if(index == n) return ;
if(s[index] == '0') {
cur[count] = 0;
dfs(s, count + 1, index + 1);
}
// 枚举每一种可能
int ip = 0;
for(int i = index; i < n; i++) {
ip = ip * 10 + (s[i] - '0');
// 如果字段符合要求,尝试这种可能
if(ip > 0 && ip <= 255) {
cur[count] = ip;
dfs(s, count + 1, i + 1);
}else {
// 如果不符合,说明这个方案不对直接回溯
break;
}
}
}
};
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem
前言我们习惯用idea编写、调试代码,在LeetCode上刷题时,如果能够在IDEA编写代码,并且做好代码管理,是一件事半功倍的事情。对于后续复习题目,做笔记也会非常便利。本文目的在于介绍LeetCodeEditor的使用,以及配置工具类,最终目录结构如下:note:放置笔记src:放置代码leetcode.editor.cn:插件LeetCodeEditor自动生成utils:自定义的工具包,可用于自动化输入测试用例,定义题目需要的类(结构体)out:运行测试时自动生成LeetCodeEditorGitHub:https://github.com/shuzijun/leetcode-edit
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
【动态规划】一、背包问题1.背包问题总结1)动规四部曲:2)递推公式总结:3)遍历顺序总结:2.01背包1)二维dp数组代码实现2)一维dp数组代码实现3.完全背包代码实现4.多重背包代码实现一、背包问题1.背包问题总结暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!背包问题是动态规划(DynamicPlanning)里的非常重要的一部分,关于几种常见的背包,其关系如下:在解决背包问题的时候,我们通常都是按照如下五部来逐步分析,把这五部都搞透了,算是对动规来理解深入了。1)动规四部曲:(1)确定dp数组及其下标的含义(2)确定递推公式(3)dp数组的初始化(4)确定遍历顺
我有一个RubyonRails应用程序,其中一个模型的验证失败。对于此验证可能失败的地方,代码库有不同的入口点。我有兴趣弄清楚它是从哪里来的。由于这是一个简单的验证方法,因此不涉及任何异常,我只是从方法中返回false并且保存失败。目前是否还可以记录回溯以查明此验证源自哪个服务/路由,以便我可以查看是什么导致此对象的状态发生更改以使其验证失败? 最佳答案 你可以试试caller():deffoo2putscallerenddeffoofoo2#line5endfoo#line7结果:test.rb:5:in`foo'test.rb:
如何使用回溯创建异常?我知道我们可以做这样的事情来实现这一目标:beginraiseStandardError,"message"rescueStandardError=>exceptionexception.backtraceend或者exception=StandardError.new("message")exception.set_backtrace(caller)但我正在寻找这样的东西:exception=StandardError.new("message",backtrace:caller)有没有一种方法可以使用自定义消息和回溯来初始化异常?
1,Camera基本工作原理答案:光线通过镜头Lens进入摄像头内部,然后经过IRFilter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(如果有的话,如果没有则以DVP的方式传送数据到基带芯片baseband,此时的数据格式RawData,后面有讲进行加工)加工处理,转换成RGB、YUV等格式输出。数据流是如何从sensor到APP的?上述描述结束后,在ISP处理后面的阶段,数据会进行分流,分为capture,preview,video等以供后续动作使用。例如
我有一个或多或少像这样的测试:classFormDefinitionTest我特意加了一个raise"blah"在路上的某个地方,我得到了这个错误:RuntimeError:blahtest/unit/form_definition_test.rb:79:in`__bind_1290079321_362430'当我应该得到一些东西时:/Users/pupeno/projectx/db/seed/sheet_definitions.rb:17:in`sheet_definition':blah(RuntimeError)from/Users/pupeno/projectx/db/seed
我正在使用RSpec(最新版本2.12.2)来测试我正在处理的一个小型Ruby类。我的问题是,当RSpec测试失败时,测试输出看起来非常冗长,并显示了一个巨大的错误消息列表,几乎是一个完整的回溯。这意味着我必须向上滚动才能看到实际的错误消息和跟踪的顶部。我相信默认情况下RSpec应该这样做,但它似乎并没有为我做这件事。例如,如果我运行rspecspec/my_spec.rb:132(只运行一个在L132上的测试),我得到这个输出:Failure/Error:@f.has_changed?("test").shouldbe_trueexpected:truevaluegot:fals