![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
模拟
..........
重you小垃
这个作者很懒,什么都没留下…
展开
-
leetcode59. 螺旋矩阵 II(中等)
思路:模拟具体思路:如果遇到边缘或者遇到之前访问过的改变方向原创 2022-07-03 17:14:58 · 130 阅读 · 0 评论 -
leetcode14.最长公共前缀(简单)
思路: 外层依次遍历每一个下标,内层遍历每个字符串 注意:i 更新到最后的情况,此时index没有赋值!!!class Solution {public: string longestCommonPrefix(vector<string>& strs) { string ans = ""; int n = strs.size(); //n个字符串 int len = ~(1 << 31); /.原创 2021-09-29 11:12:33 · 68 阅读 · 0 评论 -
leetcode38.外观数列(中等)
思路一:暴力 O(n*m m是生成字符串的最大长度)class Solution {public: string countAndSay(int n) { string s = "1"; for (int i = 1; i < n; ++i) { string tmp; int j = 0, start = 0; while (j < s.size()) {...原创 2022-01-04 12:55:32 · 225 阅读 · 0 评论 -
leetcode2013.检测正方形(中等,少)
count的思路:hang[i]表示纵坐标为i所对应的横坐标有哪些lie[i]表示横坐标为i所对应的纵坐标有哪些假设坐标是[x,y],先检查一下hang[y]对应哪些横坐标,然后找到能围成正方形的对角坐标点,接着判断第三个点是否存在。当前的方案数就是:三个坐标点数目的乘积。易错点:先检查一下hang[y]对应的横坐标不能是x,因为这样的话面积就为0了。class DetectSquares {public: set<int> hang[1005]; //hang[i]表...原创 2021-09-25 21:12:31 · 147 阅读 · 0 评论 -
leetcode31.下一个序列(中等)
思路:实现next_permutation() ->思路来自STL源码剖析step1:从右向左遍历,直到找到下标i,nums[i]<nums[i+1]step2:从右向左扫描,找到第一个第一个下标j(nums[j]大于nums[i]),两者进行交换step3:将下标i后面所有的元素进行翻转class Solution {public: void nextPermutation(vector<int>& nums) { int n =...原创 2021-10-06 21:01:18 · 76 阅读 · 0 评论 -
leetcode54.螺旋矩阵(中等)
思路:以画一个“口”字为一圈(右->下->左->上),重复画“口”即可,通过观察,起点的位置分别为:(0,0) (1,1)(2,2)…难点1:循环终止条件的选择:当2×3的矩阵时,从(0,0)循环一圈即可 ----------------------> 下标< min(2,3)/2当3×2的矩阵时,从(0,0)循环一圈即可 ----------------------> 下标<min(2,3)/2当3×4的矩阵时,从...原创 2021-10-07 21:01:02 · 76 阅读 · 0 评论 -
leetcode26.删除有序数组中的重复项(简单)
思路: 题目要求空间复杂度为O(1),以为不可能实现,但是题目里已经提示了,nums已升序排列,所以用pre记录前一个数值,与nums[i]依次比较即可,轻松几分钟内写出来。class Solution {public: int removeDuplicates(vector<int>& nums) { int n = nums.size(); if (n == 0 || n == 1) return n; int..原创 2021-10-07 21:19:27 · 62 阅读 · 0 评论 -
leetcode73.矩阵置零(中等)
自己的想法:定义两个set hang, lie存储为0的所有行,所有列。遍历二维数组一遍对hang lie进行更新,然后根据hang lie对矩阵进行修改。改进1:进复杂度进行提升。用vector< int>取代set< int>, vector< int> hang(m), lie(n); 用对应的下标来表示行 列的false 还是trueclass Solution {public: void setZeroes(vector<vecto...原创 2021-10-08 21:51:15 · 94 阅读 · 0 评论 -
396.螺旋函数(中等)
思路:4(0) 3(1) 2(2) 6(3)6(0) 4(1) 3(2) 2(3)2(0) 6(1) 4(2) 3(3)3(0) 2(1) 6(2) 4(3)可以发现:每旋转一位,就会在之前的基础上,前n-1个元素都增加了1次,最后一个元素减少了n-1次,ans每次更新为较大的值。启发:对于这种固定操作循环很多次的题目,问所有操作中的最大值,可以先把第一次的值求出来,然后观察每一次之间变化是否存在规律。class Solution {public: int maxRotateF.原创 2021-10-09 20:35:59 · 1099 阅读 · 0 评论 -
leetcode66.加一(简单)
思路:在数组上模拟加法class Solution {public: vector<int> plusOne(vector<int>& digits) { int n = digits.size(); int bit = 1; int index = n - 1; while (index >= 0 && digits[index] + bit >= 10) { ..原创 2021-10-10 10:06:57 · 74 阅读 · 0 评论 -
leetcode605.种花问题(简单)
自己的思路:直接遍历一遍,如果当前位置可以种花则种,最后跟0比较决定返回true/false。学习别人的代码风格&&思路(直接跳格子,这样也不会对原来的数组进行修改):(1)当遇到1时,说明这个位置有花,那必然从index+2的位置才有可能种花,因此当碰到1时直接跳过下一格。(2)当遇到0时,由于1都是跳两格,所以前面必然是0,此时看一下后面是0吗,是?此时能种花,然后把当前格看成1继续跳两格。不是?跳三格。class Solution {public: bool ca..原创 2022-04-01 15:01:35 · 1206 阅读 · 0 评论 -
leetcode400.第N位数字(中等)
思路:模拟找规律:1位数:1-9,一共9个数字2位数:10-99,一共90个数字,即9 * 10 * (2 - 1)3位数:100-999,一共900个数字,即9 * 10 * (3 - 1)k位数,包括的位数一共有k * 9 * 10^(k - 1)位。比如:找第490位是多少?9 +180 < 4909 + 180 + 2700 > 490,所以一定是个三位数。490-9-180=301。301/3=100,所以应该是在100+100+1=201这个数字上。301%3.原创 2022-03-25 19:56:09 · 298 阅读 · 0 评论 -
leetcode125.验证回文串(简单)
易错点:存在字母的数字,判断相等(字母大写和小写之间相等)时,不能通过abs(s1[l] - s1[r]) == 32来判断相等,因为’0’和’P’之间相差32但不相等,正确的解法是先把所有的都转化为小写。class Solution {public: bool isPalindrome(string s) { //isalpha(ch) || isdigit(ch) 可以省略写成:isalnum(ch) //tolower(ch) 如果ch是大写字母则转化为.原创 2022-03-03 21:18:44 · 56 阅读 · 0 评论 -
leetcode118.杨辉三角(简单)
方法: 一行一行构造i个元素,然后放进去就好了。class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> ans; for (int i = 0; i < numRows; ++i) { vector<int> tmp; ..原创 2022-03-03 20:57:57 · 49 阅读 · 0 评论 -
leetcode48 旋转图像(中等)
做这种题目先考虑矩阵的转置,然后与目标比较。思路是:先转置,然后再翻转即可。class Solution {public: void rotate(vector<vector<int>>& matrix) { //用swap()函数实现交换 //思想:先转置,再翻转 if (matrix.size() == 0) return ; // 先判断空数组的情况 for (int i = 0; i ...原创 2020-12-02 20:07:58 · 88 阅读 · 0 评论 -
leetcode 696计数二进制字符串(简单)
我自己做的,双重循环,n方的复杂度,超时了。。。。。class Solution {public: bool judge(string str, int a); //从下标a开始的字符串符合返回true int countBinarySubstrings(string s) { int count = 0; for (int i = 0; i < s.length() - 1; i++){ if (judge(s, i))..原创 2020-11-24 14:18:04 · 160 阅读 · 0 评论 -
leetcode6.Z字变换(中等)
方法一:直接构造ans。发现每行每个字符之间间隔的并不是固定的,所以感觉不太好做,放弃了。。。方法二:直接模拟。class Solution {public: string convert(string s, int numRows) { int n = s.size(), index = 0, x = 0, y = 0; if (numRows == 1) return s; //这里必须特殊判断一下,如果不判断的话进入下面的模拟就出...原创 2022-03-01 21:11:07 · 53 阅读 · 0 评论