摘要: 题目: 解答: 从最末位寻找第一个破坏升序的数nums[pos - 1], 然后在遍历过的数里寻找比该数大的最小的一个数。如遍历过的数为[7,6,4,3], nums[pos - 1]为5, 则5需要与6进行交换, 在将[7,5,4,3]改为升序(这里使用reverse)。 遍历过的数从后往前一定是 阅读全文
posted @ 2020-05-04 19:31 梦醒潇湘 阅读(193) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 vector<vector<int>> threeSum(vector<int>& nums) 4 { 5 sort(nums.begin(), nums.end()); 6 7 int N = nums.size(); 阅读全文
posted @ 2020-05-04 19:25 梦醒潇湘 阅读(195) 评论(0) 推荐(0)
摘要: 题目: 解答: 将A的从低位(尾部数字)与K相加,同时K每次都要丢弃个位数字,然后与A的下一个数字相加(此思路参考评论区大佬做的)。 1 class Solution { 2 public: 3 vector<int> addToArrayForm(vector<int>& A, int K) 4 阅读全文
posted @ 2020-05-04 18:52 梦醒潇湘 阅读(241) 评论(0) 推荐(0)
摘要: 题目: 解答: lef和rig分别指向左右的数,比较并从最大位开始装。 1 class Solution { 2 public: 3 vector<int> sortedSquares(vector<int>& A) 4 { 5 int len = A.size(); 6 vector<int> a 阅读全文
posted @ 2020-05-04 18:49 梦醒潇湘 阅读(147) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:线性扫描。 我们从数组的最左侧开始扫描,直到找到第一个不满足 A[i] < A[i + 1] 的 i,那么 i 就是这个数组的最高点。如果 i = 0 或者不存在这样的 i(即整个数组都是单调递增的),那么就返回 false。否则从 i 开始继续扫描,判断接下来的的位置 j 阅读全文
posted @ 2020-05-04 18:46 梦醒潇湘 阅读(235) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:双指针。 在找到一个偶数位是奇数的前提下,找奇数位上的偶数,找到之后在交换。 1 class Solution { 2 public: 3 vector<int> sortArrayByParityII(vector<int>& A) 4 { 5 int j = 1; 6 f 阅读全文
posted @ 2020-05-04 18:44 梦醒潇湘 阅读(184) 评论(0) 推荐(0)
摘要: 题目: 解答: 设置双指针 如果右指针 r 是奇数,指针往右走 否则与左指针 l 交换一次 移动左指针 l 1 class Solution { 2 public: 3 vector<int> sortArrayByParity(vector<int>& A) 4 { 5 int l = 0; 6 阅读全文
posted @ 2020-05-04 18:41 梦醒潇湘 阅读(356) 评论(0) 推荐(0)
摘要: 题目: 解答: 如果数组单调则所有相邻两值的差必须都同号。 1 class Solution { 2 public: 3 bool isMonotonic(vector<int>& A) 4 { 5 //两相邻值的差 6 int sub=0; 7 for (int i = 1; i < A.size 阅读全文
posted @ 2020-05-04 18:39 梦醒潇湘 阅读(217) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路:滑动窗口。 每个(连续)增加的子序列是不相交的,并且每当 nums[i-1]>=nums[i] 时,每个此类子序列的边界都会出现。当它这样做时,它标志着在 nums[i] 处开始一个新的递增子序列,我们将这样的 i 存储在变量 anchor 中。例如,如果 nums=[7,8, 阅读全文
posted @ 2020-05-04 18:27 梦醒潇湘 阅读(209) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:累计求和 为了获得长度为 k的子数组的平均值,我们需要知道这 k个元素之和。使用 sum记录数组的累加和,sum[i]存储从第一个元素到第 i个元素之和。该数组只需要计算一次。 在数组 sum中,原数组索引从 i到 i+k的元素之和为 sum[i] - sum[i-k]。按照 阅读全文
posted @ 2020-05-04 18:21 梦醒潇湘 阅读(394) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:排序。 我们将数组进行升序排序,如果数组中所有的元素都是非负数,那么答案即为最后三个元素的乘积。 如果数组中出现了负数,那么我们还需要考虑乘积中包含负数的情况,显然选择最小的两个负数和最大的一个正数是最优的,即为前两个元素与最后一个元素的乘积。 上述两个结果中的较大值就是答案 阅读全文
posted @ 2020-05-04 18:16 梦醒潇湘 阅读(266) 评论(0) 推荐(0)
摘要: 题目: 解答: 我们从左到右扫描数组 flowerbed,如果数组中有一个 0,并且这个 0 的左右两侧都是 0,那么我们就可以在这个位置种花,即将这个位置的 0 修改成 1,并将计数器 count 增加 1。对于数组的第一个和最后一个位置,我们只需要考虑一侧是否为 0。 在扫描结束之后,我们将 c 阅读全文
posted @ 2020-05-04 17:57 梦醒潇湘 阅读(167) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:暴力破解,找出所有的两个元素的排列。 方法二:排序。 为了理解这种方法,让我们从不同的角度来看待问题。我们需要形成数组元​​素的配对,使得这种配对中最小的总和最大。因此,我们可以查看选择配对中最小值的操作,比如 (a,b)可能会产生的最大损失 a-b (如果 a > b)。 阅读全文
posted @ 2020-05-04 17:44 梦醒潇湘 阅读(190) 评论(0) 推荐(0)
摘要: 题目: 解答: 依次扫描字符串,并用两个计数器记录A和L的数量,其中对于L计数器,因为需要是连续计数,所以如果碰到A和P,则需要重置L计数器。 当A计数器 > 1 时,直接返回false。当L计数器 > 2 时,直接返回false。 都扫描结束,则返回true。 1 class Solution { 阅读全文
posted @ 2020-05-04 17:41 梦醒潇湘 阅读(188) 评论(0) 推荐(0)
摘要: 题目: 解答: 首先将数组排序,随后从小到大遍历数组中的元素,对于每一个元素,向其右侧二分查找k+nums[i],因为向其左侧查找得到的nums[i]-k一定是在更早之前被发现的(nums[i]-k)+k。 如果当前元素和其前一个元素相等,那么其找到的结果也必然和前一个元素相等,是重复结果,因此直接 阅读全文
posted @ 2020-05-04 17:37 梦醒潇湘 阅读(176) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:递归 算法: (1)检查整数N,如果N小于等于1,则返回N; (2)否则,通过递归关系:F(n) = F(n-1) + F(n-2); (3)直到所有计算返回结果得到答案; 1 public class Solution { 2 public int fib(int N) { 阅读全文
posted @ 2020-05-04 17:32 梦醒潇湘 阅读(222) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:快慢指针 1 class Solution { 2 public: 3 int findMaxConsecutiveOnes(vector<int>& nums) 4 { 5 int slow = 0; 6 int fast = 0; 7 int count = 0; 8 i 阅读全文
posted @ 2020-05-04 17:24 梦醒潇湘 阅读(208) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:哈希表。 方法二:原地修改。 (1)我们需要知道数组中存在的数字,由于数组的元素取值范围是 [1, N],所以我们可以不使用额外的空间去解决它。 (2)我们可以在输入数组本身以某种方式标记已访问过的数字,然后再找到缺失的数字。 算法: (1)遍历输入数组的每个元素一次。 (2 阅读全文
posted @ 2020-05-04 17:22 梦醒潇湘 阅读(286) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一: 利用set中元素的有序性和唯一性,将元素放入set中,若set的size不小于3输出倒数第三个元素;若set的size小于3,输出最后一个元素。 1 class Solution { 2 public: 3 int thirdMax(vector<int>& nums) 4 阅读全文
posted @ 2020-05-04 17:17 梦醒潇湘 阅读(181) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一: 当我们遇到一个非零元素时,我们需要交换当前指针和慢速指针指向的元素,然后前进两个指针。如果它是零元素,我们只前进当前指针。 1 class Solution { 2 public: 3 void moveZeroes(vector<int>& nums) 4 { 5 int 阅读全文
posted @ 2020-05-04 17:11 梦醒潇湘 阅读(252) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法有排序、哈希、数学求和等,这里采用位运算。 由于异或运算(XOR)满足结合律,并且对一个数进行两次完全相同的异或运算会得到原来的数,因此我们可以通过异或运算找到缺失的数字。 1 class Solution { 2 public: 3 int missingNumber(vect 阅读全文
posted @ 2020-05-04 17:05 梦醒潇湘 阅读(175) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路:哈希。 (1)维护一个哈希表,里面始终最多包含 k 个元素,当出现重复值时则说明在 k 距离内存在重复元素; (2)每次遍历一个元素则将其加入哈希表中,如果哈希表的大小大于 k,则移除最前面的数字; (3)时间复杂度:O(n)O(n),nn 为数组长度; 1 class Sol 阅读全文
posted @ 2020-05-04 17:01 梦醒潇湘 阅读(172) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:哈希,判断value值是否大于1 1 class Solution { 2 public: 3 bool containsDuplicate(vector<int>& nums) { 4 5 unordered_map <int,int>mp; 6 for(int i:num 阅读全文
posted @ 2020-05-04 16:55 梦醒潇湘 阅读(204) 评论(0) 推荐(0)
摘要: 题目: 解答: 使用反转。 这个方法基于这个事实:当我们旋转数组 k 次, k\%nk%n 个尾部元素会被移动到头部,剩下的元素会被向后移动。 在这个方法中,我们首先将所有元素反转。然后反转前 k 个元素,再反转后面 n-kn−k 个元素,就能得到想要的结果。 假设 n=7且 k=3 。 原始数组 阅读全文
posted @ 2020-05-04 16:52 梦醒潇湘 阅读(407) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路: 如果我们把众数记为+1,把其他数记为-1,将它们全部加起来,显然和大于0,从结果本身我们可以看出众数比其他数多。 算法: Boyer-Moore算法的详细步骤如下: 1)维护一个候选众数candidate和它出现的次数count。初始时,candidate可以为任意值,cou 阅读全文
posted @ 2020-05-04 16:47 梦醒潇湘 阅读(416) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 vector<int> twoSum(vector<int>& numbers, int target) 4 { 5 int low = 0; 6 int high = numbers.size() - 1; 7 8 wh 阅读全文
posted @ 2020-05-04 16:43 梦醒潇湘 阅读(137) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 int maxProfit(vector<int>& prices) 4 { 5 int profit = 0; 6 for (int i = 1; i < prices.size(); i++) 7 { 8 int tm 阅读全文
posted @ 2020-05-04 16:32 梦醒潇湘 阅读(117) 评论(0) 推荐(0)
摘要: 题目: 解答: 我们需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。 形式上,对于每组 i和 j(其中 j >i),我们需要找出 max(prices[j] - prices[i])。 方法一:暴力法 1 class Soluti 阅读全文
posted @ 2020-05-04 16:29 梦醒潇湘 阅读(208) 评论(0) 推荐(0)
摘要: 题目: 解答: 总的来说就是利用杨辉三角形后一行与前一行的关系。更新过程为:从倒数第二个元素开始往前更新 它等于原来这个位置的数 + 前一个位置的数行[i] = 行[i] + 行[i-1] 1 class Solution { 2 public: 3 vector<int> getRow(int r 阅读全文
posted @ 2020-05-04 16:24 梦醒潇湘 阅读(128) 评论(0) 推荐(0)
摘要: 题目: 解答: 杨辉三角即该位置的值为左上角与右上角的和,注释很清楚了(note for self数组初始化方法)。 1 class Solution { 2 public: 3 vector<vector<int>> generate(int numRows) 4 { 5 vector<vecto 阅读全文
posted @ 2020-05-04 16:19 梦醒潇湘 阅读(141) 评论(0) 推荐(0)
摘要: 题目: 解答: 从后向前进行数据遍历。 (1)因为nums1的空间都集中在后面,所以从后向前处理排序的数据会更好,节省空间,一边遍历一边将值填充进去; (2)设置指针len1和len2,分别指向nums1和nums2的有数字尾部,从尾部值开始比较遍历,同时设置指针len指向nums1的最末尾,每次遍 阅读全文
posted @ 2020-05-04 16:15 梦醒潇湘 阅读(205) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路:从末位向前逐位模拟十进制加法器,首位进行单独判断。 1 class Solution { 2 public: 3 vector<int> plusOne(vector<int>& digits) 4 { 5 int size = digits.size(); 6 for(int 阅读全文
posted @ 2020-05-04 16:03 梦醒潇湘 阅读(174) 评论(0) 推荐(0)
摘要: 题目: 解答: 当我们加上一个正数的时候,和会增加;当我们加上一个负数的时候,和会减少。如果当前得到的和是个负数,那么这个和接下来的累加中应该抛弃并重新清零,不然的话,这个负数将会减少接下来的和。 1 class Solution { 2 public: 3 int maxSubArray(vect 阅读全文
posted @ 2020-05-04 15:56 梦醒潇湘 阅读(224) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路:双指针法。 既然问题要求我们就地删除给定值的所有元素,我们就必须用O(1)的额外空间来处理它。如何解决?可以保留两个指针i和j,其中i是慢指针,j是快指针。 算法: 当nums[j]与给定的值相等时,递增j以跳过该元素。只要nums[j] != val, 我们就复制nums[j 阅读全文
posted @ 2020-05-04 15:37 梦醒潇湘 阅读(156) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路:双指针法。 数组完成排序后,可以放置两个指针i和j,其中i是慢指针,而j是快指针。只要nums[i] = nums[j],就增加j以跳过重复项。 当遇到nums[i] != nums[j]时,跳过重复项的运行已经结束,因此必须把它(nums[j])的值复制到nums[i+1]。 阅读全文
posted @ 2020-05-04 15:28 梦醒潇湘 阅读(149) 评论(0) 推荐(0)
摘要: 题目: 解答: 首先判断两个字符串长度,相差大于一返回 false 双指针遍历两个字符串,同时记录编辑次数 op_cnt: 若 first[i] == second[j],不需编辑,i,j 加一 若 first[i] != second[j],分为三种情况: first[i] == second[j 阅读全文
posted @ 2020-05-04 15:21 梦醒潇湘 阅读(159) 评论(0) 推荐(0)
摘要: 题目: 解答: 解题思路: (1)使用哈希集合存储列表中的每一个单词,接着遍历列表的中的每个单词判断其是否由其他单词组合而成; (2)递归查找时,因为不能由其自身组成,因此每次从哈希集合中删除其自身; (3)递归分割查找每一种可能,当一种分割到空串时,返回true,所有的情况遍历完毕,返回false 阅读全文
posted @ 2020-05-04 15:13 梦醒潇湘 阅读(228) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 int findClosest(vector<string>& words, string word1, string word2) 4 { 5 6 int t1 = -1; 7 int t2 = -1; 8 int re 阅读全文
posted @ 2020-05-04 15:05 梦醒潇湘 阅读(221) 评论(0) 推荐(0)
摘要: 题目: 解答: 解题思路: 此题主要通过如下两个步骤来完成: (1)将输入的中缀表达式转为后缀表达式(即逆波兰表达式); (2)计算逆波兰表达式; 用到的数据结构主要是栈。 中缀表达式转后缀表达式(逆波兰表达式) (1)变量及函数说明 getPriority(char ch): 返回运算符的优先级 阅读全文
posted @ 2020-05-04 15:01 梦醒潇湘 阅读(234) 评论(0) 推荐(0)
摘要: 题目: 解答: 变位词利用sort后可相同 哈希表添加词下标即可 之后遍历哈希表根据下标添加变位词。 1 class Solution { 2 public: 3 vector<vector<string>> groupAnagrams(vector<string>& strs) 4 { 5 vec 阅读全文
posted @ 2020-05-04 14:52 梦醒潇湘 阅读(169) 评论(0) 推荐(0)
摘要: 题目: 解答: 只有在我们知道序列仍然保持有效时才添加 ‘(‘ or ‘)’。我们可以通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点。 如果我们还剩一个位置,我们可以开始放一个左括号。 如果它不超过左括号的数量,我们可以放一个右括号。 1 class Solution { 2 3 vect 阅读全文
posted @ 2020-05-04 14:48 梦醒潇湘 阅读(183) 评论(0) 推荐(0)
摘要: 题目: 解答: 根据常规十进制小数转二进制小数的方法进行转化;十进制的小数转换为二进制,主要是小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0。 例如:十进制的0.125,要转换为二进制的小数。 (1)0.125 x 2 = 0.25 ==> 0 (2)0.25 x 2 = 0. 阅读全文
posted @ 2020-05-04 14:44 梦醒潇湘 阅读(223) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 int strToInt(string str) 4 { 5 if (str.size() == 0) 6 { 7 return 0; 8 } 9 10 int i = 0; 11 int minus = 1; 12 13 阅读全文
posted @ 2020-05-04 14:35 梦醒潇湘 阅读(163) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路:双指针。 1 class Solution { 2 public: 3 int cnt[3]; 4 public: 5 int numberOfSubstrings(string s) 6 { 7 int len=(int)s.length(); 8 int ans=0; 9 阅读全文
posted @ 2020-05-04 13:22 梦醒潇湘 阅读(191) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 int numSteps(string s) 4 { 5 int idx = s.size() - 1; 6 int ans = 0; 7 while(idx > 0) 8 { 9 //第一位最后肯定剩1,不另计算 10 阅读全文
posted @ 2020-05-04 13:18 梦醒潇湘 阅读(247) 评论(0) 推荐(0)
摘要: 题目: 解答: 就是逐个遍历从 1 到 N 的数字,转换成二进制字符串(去掉头部无用的 '0')看看是否在字符串 S 中,遇到不在的就返回 false, 要是都在就返回 true。 1 class Solution { 2 public: 3 bool queryString(string S, i 阅读全文
posted @ 2020-05-04 13:08 梦醒潇湘 阅读(259) 评论(0) 推荐(0)
摘要: 题目: 解答: 依次遍历S中的每个字符,如果当前字符为c,判断栈顶两个字符是不是b和a,如果是,两次退栈, 否则可直接判断S不是有效的字符串, 当前前提是先判断栈中元素个数是不是大于2,如果不是,直接判断无效。如果是 字符a 和b直接入栈。 1 class Solution { 2 public: 阅读全文
posted @ 2020-05-04 13:05 梦醒潇湘 阅读(189) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 int scoreOfParentheses(string S) 4 { 5 stack<int> stack; 6 stack.push(0); // The score of the current frame 7 8 阅读全文
posted @ 2020-05-04 13:00 梦醒潇湘 阅读(201) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string shiftingLetters(string S, vector<int>& shifts) 4 { 5 int size = (int)S.size(); 6 int cnt = 0; 7 for (int 阅读全文
posted @ 2020-05-04 12:52 梦醒潇湘 阅读(223) 评论(0) 推荐(0)
摘要: 题目: 解答: 优先队列,根据字母数量进行排序。 (1)记录每个字母在字符串中的数量(哈希表); (2)根据字母数量降序排序(插入优先队列,以字母数量较大优先级较高,类似于大顶堆) (3)若队列顶部字母的数量大于一半则无法构造,直接返回空字符串(奇偶有别) (4)按照字母数量降序顺序,当队列不空时, 阅读全文
posted @ 2020-05-04 12:45 梦醒潇湘 阅读(275) 评论(0) 推荐(0)
摘要: 题目: 解答: 这道题因为只需要判断是否可以构成有效的括号,并不需要列举出合法的解。可以直接遍历一遍字符串,记录出现的括号和*的情况。 1 class Solution { 2 public: 3 bool checkValidString(string s) 4 { 5 // left和star分 阅读全文
posted @ 2020-05-04 12:39 梦醒潇湘 阅读(262) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 int countSubstrings(string s) 4 { 5 // 中心扩展法 6 int ans = 0; 7 for (int center = 0; center < 2 * s.length() - 1; 阅读全文
posted @ 2020-05-04 12:33 梦醒潇湘 阅读(177) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 int minDistance(string word1, string word2) 4 { 5 int N1 = word1.size(); 6 int N2 = word2.size(); 7 8 vector<ve 阅读全文
posted @ 2020-05-04 12:29 梦醒潇湘 阅读(185) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 vector<int> digits(int n) 4 { 5 vector<int> res; 6 while (n > 0) 7 { 8 res.push_back(n % 10); 9 n /= 10; 10 } 1 阅读全文
posted @ 2020-05-04 12:23 梦醒潇湘 阅读(133) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路: 注意到数组元素均大于1,所以每次做除法之后都会使被除数变小。因此为了使最终结果最大,可将第一个元素作为被除数,之后所有元素做完除法之后的结果为除数。这样可以让被除数尽可能的大,除数尽可能的小。 1 class Solution { 2 public: 3 string opt 阅读全文
posted @ 2020-05-04 12:19 梦醒潇湘 阅读(267) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路: 1,时间转化为分钟数; 2,然后对数字进行排序,进行比较; 3,注意头部和尾部时间的比较时需要考虑不同的方向; 1 class Solution { 2 public: 3 const int DAY_MINUTE = 24 * 60; 4 int time2int(cons 阅读全文
posted @ 2020-05-04 12:13 梦醒潇湘 阅读(191) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string complexNumberMultiply(string a, string b) 4 { 5 int a1 = stoi(a); 6 int b1 = stoi(b); 7 8 int i = 0; 9 i 阅读全文
posted @ 2020-05-04 12:10 梦醒潇湘 阅读(176) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string validIPAddress(string IP) 4 { 5 if (isValidIPv4(IP)) 6 { 7 return "IPv4"; 8 } 9 if (isValidIPv6(IP)) 10 阅读全文
posted @ 2020-05-04 12:05 梦醒潇湘 阅读(186) 评论(0) 推荐(0)
摘要: 题目: 解答: 方法一:分割+解析,两次遍历,线性空间。 第一个想法是将两个字符串按点字符分割成块,然后逐个比较这些块。 如果两个版本号的块数相同,则可以有效工作。如果不同,则需要在较短字符串末尾补充相应的 .0 块数使得块数相同。 算法: (1)根据点分割两个字符串将分割的结果存储到数组中。(2) 阅读全文
posted @ 2020-05-04 12:00 梦醒潇湘 阅读(288) 评论(0) 推荐(0)
摘要: 题目: 解答: DFS深度搜索思路,数值>255非法,以零开头长度大于等于2非法;不同于常规回溯思路,同层只用最多遍历3个数字,依次查看是否满足数值要求;各段的数值状态也是分段存储的,互不干涉,使用vector<string> path来存储; 1 private: 2 vector<string> 阅读全文
posted @ 2020-05-04 11:52 梦醒潇湘 阅读(255) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string reverseWords(string s) 4 { 5 if (s.empty()) 6 { 7 return s; 8 } 9 10 int len = 0; 11 string ans = ""; 12 阅读全文
posted @ 2020-05-04 11:49 梦醒潇湘 阅读(171) 评论(0) 推荐(0)
摘要: 题目: 解答: 因为要找组成一样的单词,如何判断?最简单的,一排序,如果是同一个单词,那么就是组成一样的。比如 “eat” "tea" 排序后都为 “aet”。只要引入一个hash表,索引是排序后的单词,值为结果vector的下标,循环一遍就好了。 1 class Solution { 2 publ 阅读全文
posted @ 2020-05-04 11:42 梦醒潇湘 阅读(178) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string multiply(string num1, string num2) 4 { 5 int m = num1.size(); 6 int n = num2.size(); 7 8 // 结果最多为 m + n 阅读全文
posted @ 2020-05-04 11:24 梦醒潇湘 阅读(266) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 vector<string> generateParenthesis(int n) { 2 vector<vector<string>> v(n+1); 3 v[0].push_back(""); 4 for(int i = 1; i <= n; i++){ 5 for(int 阅读全文
posted @ 2020-05-04 11:18 梦醒潇湘 阅读(143) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 // 1. 用map记录每个数字按键对应的所有字母 4 map<char, string> M = { 5 {'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, { 阅读全文
posted @ 2020-05-04 11:11 梦醒潇湘 阅读(202) 评论(0) 推荐(0)
摘要: 题目: 解答: 32位 最大值和最小值分别是 2147483647, -2147483648。 如果 res = 214748364,r > 7, 那么接下来的那一步操作,res = res * 10 + r = 2147483648 > INT_MAX, 直接溢出报错。不过,我不理解的地方是,为什 阅读全文
posted @ 2020-05-04 11:04 梦醒潇湘 阅读(167) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string convert(string s, int numRows) 4 { 5 if (numRows == 1) 6 { 7 return s; 8 } 9 10 // 防止s的长度小于行数 11 vector< 阅读全文
posted @ 2020-05-04 10:26 梦醒潇湘 阅读(221) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路为三次反转。 1 class Solution { 2 public: 3 int reverse_string(string& s, int start, int end) 4 { 5 for (int i = start; i <= (start + end) / 2; i+ 阅读全文
posted @ 2020-05-04 10:11 梦醒潇湘 阅读(139) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string reverseWords(string s) 4 { 5 if(s.empty()) 6 { 7 return s; 8 } 9 10 int len = 0; 11 string ans = ""; 12 阅读全文
posted @ 2020-05-04 10:08 梦醒潇湘 阅读(121) 评论(0) 推荐(0)
摘要: 题目: 解答: 解题思路: (1)长度相同; (2)如果s2是s1的旋转串,可以得出s2肯定是s1+s1的子串; 1 class Solution { 2 public: 3 bool isFlipedString(string s1, string s2) 4 { 5 return s1.size 阅读全文
posted @ 2020-05-04 10:01 梦醒潇湘 阅读(146) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string compressString(string S) 4 { 5 if (S.size() == 0) 6 { 7 return S; // 空串处理 8 } 9 10 string ans = ""; 11 i 阅读全文
posted @ 2020-05-04 09:54 梦醒潇湘 阅读(191) 评论(0) 推荐(0)
摘要: 题目: 解答: 思路: 回文数是对称的。 能构成回文数的条件是:一个字符串里面最多只有一个字符,它的数量是奇数,超过一个字符的数量为奇数就不可能构成回文串。 即:两个及以上的字符出现次数为奇,就不是回文串。 1 class Solution { 2 public: 3 bool canPermute 阅读全文
posted @ 2020-05-04 09:49 梦醒潇湘 阅读(180) 评论(0) 推荐(0)
摘要: 题目: 解答: 1 class Solution { 2 public: 3 string replaceSpaces(string S, int length) 4 { 5 string ans; 6 int i=0; 7 for(auto c:S) 8 { 9 if(c==' ') 10 { 1 阅读全文
posted @ 2020-05-04 09:44 梦醒潇湘 阅读(161) 评论(0) 推荐(0)