![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
十王走马
自天祐之,吉无不利
展开
-
LeetCode_1021_ Complement of Base 10 Integer
求十进制数的反码通过观察可知,输入与输出的关系为:Input+Output=其中n为使Input+Output成立的最小m值class Solution {public: int bitwiseComplement(int N) { if(N<=1) return 1-N; int cnt=1; while(cnt<=N) cn...原创 2019-03-20 21:16:10 · 91 阅读 · 0 评论 -
LeetCode_54/59_螺旋矩阵
找到规律:每次循环分别遍历上、右、下、左四条边即可54.class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int left=0,right,up=0,down,i; vector<int> ans...原创 2018-12-24 22:35:38 · 107 阅读 · 0 评论 -
LeetCode_73_Set Matrix Zeroes
思路较简单,对出现0的行或者列做好标记就好我突发奇想,看看 set的查找和一般数组的随机访问差别有多大……用set实现:class Solution {public: void setZeroes(vector<vector<int>>& matrix) { int m,n,i,j; set<int> row,...原创 2018-12-24 21:00:20 · 72 阅读 · 0 评论 -
Leetcode_31_Next Permutation
受这篇博客启发,并自己试着按字典顺序枚举1-5全排列,得出思路如下:1.从右往左遍历,找到第一个比后一个小的数2.从这个数开始,找到后面比它大又与它最接近的数,交换这两个数3.从交换的后一个位置开始,从小到大排序class Solution {public: void nextPermutation(vector<int>& nums) { ...原创 2018-12-18 22:24:30 · 70 阅读 · 0 评论 -
LeetCode_202_Happy Number
需要有额外的空间来存储出现过的情况,防止有周期性的变化,从而发生死循环class Solution {public: int QuadraticSum(int n) { int ans=0; while(n>0) { ans=ans+(n%10)*(n%10); n=n/10; } return ans; } bool isHappy(i...原创 2019-01-03 20:19:02 · 75 阅读 · 0 评论 -
Leetcode_17_Letter Combinations of a Phone Number
虽然本题说“给定一个仅包含数字 2-9 的字符串”,但还是要考虑所给串为空的情况......class Solution {public: vector<string> letterCombinations(string digits) { vector<string> ans; map<char,string> store;...原创 2018-12-18 21:07:34 · 81 阅读 · 0 评论 -
LeetCode_92/25/23_链表的有关操作
一、92.反转链表II思路即分别定位第m个和第n个结点(若不存在,则直接返回首结点),从m到n-1,摘下每一个结点,并插入到第n个结点之后/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :...原创 2018-12-23 23:09:30 · 130 阅读 · 0 评论 -
LeetCode_102/107_Binary Tree Level Order Traversal
二叉树的层次遍历,与先/中/后序遍历不同,层次遍历更像是图的广度遍历,采用队列的结构来辅助实现102.从上到下的层次遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * Tr...原创 2018-12-29 00:00:50 · 77 阅读 · 0 评论 -
Leetcode_48_Rotate Image
一、最快想到的思路:找规律,找出原坐标到新坐标的变化规律([x][y] --> [y][n - 1 - x])即可。需注意的是,这种操作涉及到交换,但又不同于一般的两两交换——每次交换操作将涉及到四个点。所以,综上所述,可以将矩阵以每条边的中线为分割线,分成四块,以其中一块为基准进行变换。class Solution {public: void rotate(vector...原创 2018-12-11 22:02:22 · 52 阅读 · 0 评论 -
LeetCode_100_Same Tree
(二叉)树的套路一般都是递归,先考虑根结点的情况,再考虑左、右子树的情况,分析子树时,也是如此根据此套路,现将本题分析如下:1.先考虑根结点的情况(要先排除根结点为空的情况,以防访问非法地址):(1)当有且仅有一个根结点为空时,返回false(2)当两个根结点均为空时,返回true(3)剩下的情况,就不存在根结点为空的情景了,访问根结点的值,若不相等,则返回false2.分...原创 2018-12-22 22:02:55 · 66 阅读 · 0 评论 -
Leetcode_45/55_Jump Game
一、45.Jump Game最开始的思想是最简单的,暴力将每一种情况都“遍历”一回,毫无疑问,超时了……(下为超时代码……)class Solution {public: int jump(vector<int>& nums) { vector<vector<int>> jumps; vector<int...原创 2018-12-22 21:02:01 · 86 阅读 · 0 评论 -
Leetcode_101_Symmetric Tree
判断一棵二叉树是否对称,可以先将根结点除云,剩下的问题,就基本和判断两棵树是否相同类似了区别在于,判断相同的树时,是左子树与左子树比较,右子树与右子树比较,这里是左与右,右与左,同时在每次判断之前,要先判断好根结点是否为空下附解答1.递归版本/** * Definition for a binary tree node. * struct TreeNode { * ...原创 2018-12-28 13:27:31 · 65 阅读 · 0 评论 -
Leetcode_16_3Sum Closest
一、首先想到的思路,最简单暴力,设置三重循环搜索1.对原数组按从小到大进行排序2.将要返回的变量初始化为前三个数的和3.开始循环(1)若和更接近目标值,则更新要返回的变量(2)由于现在数组已经按照从小到大顺序排列了,可以做以下检测:i)若和已经等于目标值,则直接返回该数值ii)若和大于目标值,则可以跳出本层循环(在排序的数组中,和会随着遍历的过程增大,和小于目标值,继续...原创 2018-12-17 18:22:59 · 93 阅读 · 0 评论 -
LeetCode_961_N-Repeated Element in Size 2N Array
根据题意,共有2N个数,其中不重复的有N+1个,重复的数字有N个由鸽巢原理可知,必然只有一个元素重复了所以只需要在遍历数组的过程中,若发现有数字出现过了,则重复N遍的数字就是它了用基于哈希的map结构来实现class Solution {public: int repeatedNTimes(vector<int>& A) { map&...原创 2018-12-24 23:06:19 · 173 阅读 · 0 评论 -
LeetCode_61_Rotate List
思路:以空间换时间,先遍历一回链表,将每个结点都存入容器中,这样不仅可以做到随机访问第K个结点,也可以轻松知道该链表长度(因K可能大于这一长度值,所以这么做也为之后K对长度取模的操作打“铺垫”)同时要注意以下特殊情况1.首结点为空2.链表长度为13.K为0或正好等于链表长度的倍数以上情况直接返回首结点即可/** * Definition for singly-linke...原创 2018-12-24 23:51:27 · 72 阅读 · 0 评论 -
LeetCode_111_Minimum Depth of Binary Tree
求二叉树的最小深度思路还是一如继往的递归,但不能简单地像求最大深度一样,求左、右递归函数返回值的最小值因为这样简单地操作,可能会把只有一个孩子的结点当作叶结点来处理因此有必要进行分类讨论:1.当当前结点为空时,返回02.当当前结点为叶结点(左右孩子均为空)时,返回13.当当前结点只有左(右)孩子非空时,返回左(右)孩子的最小深度值+14.当当前结点左右孩子都有时,返回它...原创 2018-12-29 21:15:32 · 91 阅读 · 0 评论 -
LeetCode_821_Shortest Distance to a Character
求一个字符串中,每个位置到指定字符的最短距离我能想到的常规做法,即开辟一个专门的容器用于记录每个指定字符出现的位置。但需要对开始以及结尾的位置单独讨论,感觉这么做挺麻烦的考虑到题目数据范围:字符串长度在1~10000之间,这就意味着,返回的容器中,每个值都不会超过10000于是,在记录指定字符位置的容器的头尾分别插入-20000和30000的值,这样在遍历字符串时,只要单纯考虑当前位置...原创 2019-02-15 20:51:27 · 120 阅读 · 0 评论 -
Leetcode_268_Missing Number
考虑到题目要求只能用额外的常数空间,所以思路是:先计算这n+1个数字的总和,之后遍历数组,遇到一个数,就从总和中扣除,最后的差值就是缺失的数字了class Solution {public: int missingNumber(vector<int>& nums) { int i,n=nums.size(); long sum; if(n...原创 2019-01-22 22:07:27 · 98 阅读 · 0 评论 -
LeetCode_777_Swap Adjacent in LR String
题目的意思是,若R的右边为X则R可以右移,若L的左边为X则L可以左移首先想到的是,把所有的X剔除后,若剩下的字符串相同,则表示可以转换为了检验这一猜想,考虑了两种极端的情况:1.XR和RX2.LX和XL这两种情况剔除X后相同,但却无法转换所以,有结论:当剔除了X后的字符串不仅要相同,而且在对应的字符中,START中的R应该比END中的R靠前,START中的L应该比END...原创 2019-01-09 21:17:22 · 141 阅读 · 0 评论 -
LeetCode_162_Find Peak Element
强行双指针……class Solution {public: int findPeakElement(vector<int>& nums) { int low=1,high=nums.size()-1; if(high==0 || high==-1) return high; if(nums[0]>nums[1]) return 0...原创 2019-01-02 23:39:22 · 72 阅读 · 0 评论 -
LeetCode_160_Intersection of Two Linked Lists
求两个相交链表的交点1.第一个思路就是先用set存一个链表,在遍历第二条链表时,对每一个结点判断其是否在第一条链表中/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), ne...原创 2019-01-02 22:21:01 · 70 阅读 · 0 评论 -
LeetCode_962_Maximum Width Ramp
主要思路是通过维护一个单调递减栈来实现,栈中存放元素对应的下标,分两步走:1.构造单调递减栈:从第一个元素开始遍历整个容器(其中第一个元素一定入栈),若栈顶对应的元素大于当前元素值,则将当前元素对应下标入栈这样做的道理是:假设栈顶有一个元素a,当前元素为b,若b>a,则后续即使有一个元素c满足c>b&&c>a,可能出现最大的坡度也应该是c和a下标之差,而不...原创 2019-01-06 21:38:26 · 188 阅读 · 0 评论 -
LeetCode_135_ Candy
分糖果:本来只想分别分析每个孩子与相邻孩子之间的评分关系,遍历一次就求出结果,尝试了一下,放弃了,还是分成两步实现:1.从前往后遍历,若当前孩子评分大于前一个,则糖果数应比前一个多1——保证每个评分比前一个高的孩子分到的糖果数也多2.从后往前遍历,若当前孩子评分大于后一个,且后一个孩子的糖果数大于等于当前的孩子,则当前孩子的糖果数应+1——保证每个评分比后一个高的孩子分到的糖果数也多...原创 2019-01-01 20:10:49 · 82 阅读 · 0 评论 -
LeetCode_134_Gas Station
首先,构造一个新的容器,其值为每个加油站的最大油量与到达下一个加油站的净剩值,同时再复制一遍添加到末尾(以方便处理环形的结构)接着,开始双重循环。第一重确定起始位置,第二重开始遍历一圈,如果发现累计的净剩值小于0,说明不能从该位置开始,跳出第二重循环class Solution {public: int canCompleteCircuit(vector<int>...原创 2019-01-05 16:52:14 · 83 阅读 · 0 评论 -
LeetCode_199_Binary Tree Right Side View
求二叉树的右视图右视图可等效为每个层次最右边的结点因此在层次遍历的代码基础上稍作修改即可/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) ...原创 2018-12-31 22:22:55 · 67 阅读 · 0 评论 -
LeetCode_91_Decode Ways
不同的解码方法:每一个非0的数字,都对应着相应的编码;同时,每两个数字之间也可能对应一种编码。因此本题有点类似于70题爬楼梯一样的递推关系:长度为n的码,对应解码方案数量=长度为n-1的+长度为n-2的。class Solution {public: int check(char c) {return (!isdigit(c)||c=='0')?0:1;} int check(char...原创 2018-12-31 19:26:28 · 82 阅读 · 0 评论 -
LeetCode_63_Unique Paths II
与62的区别在于,本题有障碍物开始,就想在62的基础上实现,认为将不考虑障碍的情况,减去经过障碍的情况即可,但提交时,提示解答错误,原因是,当有多个障碍时,可能有情况被多减了。下附错误的代码class Solution {public: int uniquePaths(int m, int n) { long long numerator=1,denominato...原创 2018-12-30 22:41:58 · 79 阅读 · 0 评论 -
LeetCode_62_Unique Paths
其实就是求组合数class Solution {public: int uniquePaths(int m, int n) { double numerator=1,denominator=1,times=min(m-1,n-1),i; for(i=0;i<times;i++) { numerator=numerator*(m+n-2-i); ...原创 2018-12-30 20:47:22 · 95 阅读 · 0 评论 -
Leetcode_125_Valid Palindrome
验证回文数,本来挺简单的一道题,开始想玩一下栈结构,结果爆内存了下附爆内存代码:class Solution {public: bool isPalindrome(string s) { string LTR,RTL; stack<char> sk; int i,n=s.size(); if(s=="") return true;...原创 2018-12-22 11:39:16 · 80 阅读 · 0 评论 -
Leetcode_43_Multiply Strings
思路同小学竖式计算的过程,有两种处理方式。class Solution {public: string multiply(string num1, string num2) { if (num1=="" || num2=="") return ""; if (num1=="0" || num2=="0") return "0"原创 2018-12-16 22:08:42 · 63 阅读 · 0 评论 -
Leetcode_24_Swap Nodes in Pairs
思路大致如下:1.因Leetcode大部分涉及链表的题目(我目前见过的都),其链表均不带头结点,操作不方便。所以,可以自己构造一个假的头结点。2.从假的头结点开始遍历,并从0开始依次编号(其中要注意对链表为空,以及当前结点的next指针为空两种情况进行特殊分析)class Solution {public: ListNode* swapPairs(ListNode* hea...原创 2018-12-08 16:33:19 · 50 阅读 · 0 评论 -
Leetcode_28_Implement strStr()
就写个简单的吧class Solution {public: int strStr(string haystack, string needle) { int len=needle.size(),i,n=haystack.size(); if(len==0) return 0; for(i=0;i<=n-len;i++) { strin...原创 2018-12-08 12:28:35 · 69 阅读 · 0 评论 -
Leetcode_27_Remove Element
直接用vector的迭代器和erase函数来实现了,不过要注意的是,erase函数实现的细节如下:1.删除单个元素前后,迭代器的指向都是不变的,而将该元素删除之后,所删除元素后边的元素会全部向前复制一个元素位置2.删除一段段元素之后,后面的元素(从iter_end开始到vector.end())会被复制到被删除元素段开始的地方(iter_begin开始),而vector.end()也根据删...原创 2018-12-07 23:03:27 · 68 阅读 · 0 评论 -
Leetcode_12_IntegerToRoman
一、最快想到的思路最简单(也最二逼……)就是通过各种判断语句,将所有情况遍历一回char* intToRoman(int num) { char * ans=(char *)malloc(5000),*ptr; int i,n; *ans=0; ptr=ans; if(num>=1000) { n=num/1000; for(i=0;i<n;i++){*...原创 2018-12-03 11:42:03 · 74 阅读 · 0 评论 -
Leetcode_13_RomanToInteger
关键在于做出一个罗马字母与数字的键值对,并对6种特殊情况进行单独分析(可以采用类似于编译原理“向后看一位”的方法)C语言版本:int GetValue(char c){ if(c=='I') return 1; if(c=='V') return 5; if(c=='X') return 10; if(c=='L') return 50; if(c=='C')...原创 2018-12-01 23:42:00 · 86 阅读 · 0 评论 -
Leetcode_6_ZigZagConvetsion
和初学C语言时,打印杨辉三角、三角形的“*”以及99乘法表类似,找到规律,判断好周期即可不同的是,本题要考虑全面,注意一些特殊情况char* convert(char* s, int numRows) { if(numRows==1) return s; char *ans=0,*ptr; int n=strlen(s),T=2*(numRows-1),rcount,i;...原创 2018-12-01 20:10:11 · 109 阅读 · 0 评论 -
Leetcode_4_Median of Two Sorted Arrays
过程:一、求中位数,最简单直接的想法就是抓一串已经完成排序的数组,通过下标访问元素,进而求出中位数。但很明确这么做,时间复杂度只能是O(nlogn),达不到题目要求的O(log(m+n))。但想了半天,实在想不出其他好办法了,就试着提交一下,结果也过了。代码(CPP)如下:class Solution {public: double findMedianSortedArrays...原创 2018-12-01 16:32:16 · 65 阅读 · 0 评论 -
Leetcode_8_atoi
考虑全面即可int myAtoi(char* str) { char *p=str; int ans=0,flag=1,limit=2147483647; int IsOverFlow=limit/10; while(*p==' ') p++; if(*p!='-' && *p!='+' && (*p<...原创 2018-11-30 22:45:51 · 59 阅读 · 0 评论 -
Leetcode_2_AddTwoNumbers
C语言:未简化的版本(运行速度更快)struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode *ans,*p1=l1,*p2=l2,*c,*ptr; int m=0,v; ans=(struct ListNode*)malloc(sizeof(...原创 2018-11-27 23:28:20 · 110 阅读 · 0 评论 -
Leetcode_1_Twosum
一、C语言已通过的代码:int* twoSum(int* nums, int numsSize, int target) { static int a[2]; int i,j; for(i=0;i<numsSize-1;i++) { for(j=i+1;j<numsSize;j++) { i...原创 2018-11-27 21:36:23 · 68 阅读 · 0 评论