LeetCode
薛昭君
每天都在进步
展开
-
326.[LeetCode]Power Of Three
大意:给定一个整数,判断是否是3的幂输入:n前提: 你得知道什么是幂,什么是对数 == 我就忘了对数是什么递归class Solution {public: bool isPowerOfThree(int n) { if (n == 1 || n == 3) return true; if (n == 0) return false; if (n%3 !原创 2016-04-15 14:46:58 · 233 阅读 · 0 评论 -
292.[LeetCode]Nim Game
题目大意:你和你的小伙伴在玩一种游戏,给定 N 个小石头,每次可以拿取 1/2/3 个石头,谁能拿到最后一个就赢了。 给定 n 个石头,你是先手,判断是是否可以赢。前提:你和小伙伴都不是傻逼思路:首先思考没有只能 拿一次的情况下,先手必胜的情况: n canWin 1 胜 2 胜 3 胜从第4个起,就是有交换手了,有4个的时候,无论拿多少个,都会导致对方进入 先手必原创 2016-04-16 00:27:01 · 197 阅读 · 0 评论 -
258.[LeetCode]Add Digits
题意给你一个数,把所有位置的数字相加,然后如果大于9,则继续相加,一直到结果是一个个位数递归递归主要就是模拟题意得过程class Solution {public: int addDigits(int num) { int sum = 0; while (num > 0) { sum += num%10; nu原创 2016-04-16 12:17:40 · 220 阅读 · 0 评论 -
104.[LeetCode]Maximum Depth of Binary Tree
题意:求一个二叉树的最大深度递归:class Solution {public: int maxDepth(TreeNode* root) { if (root == NULL) return 0; else { int l = maxDepth(root->left); int r = maxDepth(ro原创 2016-04-16 14:34:24 · 211 阅读 · 0 评论 -
226.[LeetCode]Invert Binary Tree
题意:反转一个二叉树递归:class Solution {public: TreeNode* invertTree(TreeNode* root) { //如果是NULL,则返回本身 if(root == NULL) return root; //如果左右其中有一个是非空的,则交换左右 if (root->left != NU原创 2016-04-17 01:01:39 · 228 阅读 · 0 评论 -
263.[LeetCode]Ugly Number
题意:如果一个数的素因数,只含有 2,3,5,则其就是一个丑数,否则不是,特别的1是一个丑数我的解法:递归(c++):class Solution {public: bool isUgly(int n) { if(n == 0) return false; //特别的0,是一个非臭数 if(n == 1) return true; if (n原创 2016-05-04 17:52:44 · 267 阅读 · 0 评论 -
345.[LeetCode]Reverse Vowels of a String
题意:反转字符串中的元音字母 aeiou 带 大写我的思路:有点鸡贼遍历一遍字符串,并且把其中元音字母都换成 不常用字符‘~’,并且用temp倒序存储这些字符再遍历一遍,从temp中取出字符放入 ‘~’ 的位置class Solution {public: string reverseVowels(string s) { //这里也可以使用set来排除aeiou原创 2016-05-13 00:44:14 · 269 阅读 · 0 评论 -
191.[Leetcode]Number of 1 Bits
我的算法://将转化好的二进制字符串存入s中,然后从s中判断有多少的1// 从10进制到其他进制,都是对其求余数class Solution {public:int hammingWeight(uint32_t n) { string s = ""; char temp[1]; //循环求余数 int y(0);原创 2016-05-02 19:30:39 · 322 阅读 · 0 评论 -
141.[LeetCode]Linked List Cycle
题意:找一个单链中是否有环我的解法 遍历单链,每次遍历 判断该节点的next 是否指向 head,如果指向说明是有环的,如果没指向则移动到下一个并把此节点的next指向head—缺点:会破坏此链,不过时间复杂度只要O(n)class Solution {public: bool hasCycle(ListNode *head) { if(head == NULL) r原创 2016-05-02 20:39:55 · 240 阅读 · 0 评论 -
217.[Leetcode]Contains Duplicate
判断是否重复class Solution {public: bool containsDuplicate(vector<int>& nums) { set<int> s; for(int i=0;i<nums.size();i++){ if(s.count(nums[i]) == 1) return true;原创 2016-05-02 20:43:12 · 220 阅读 · 0 评论 -
169.[LeetCode]Majority Element
class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); int n = nums.size(),count(1); for(int i=0;i<n;i++){ if(nums[i+1]原创 2016-05-02 20:44:18 · 188 阅读 · 0 评论 -
206.[LeetCode]Reverse Linked List
//递归法class Solution {public: ListNode* reverseList(ListNode* head) { if(head == NULL || head->next == NULL) return head; //... ListNode* p = head->next; ListNode*原创 2016-05-02 20:45:10 · 201 阅读 · 0 评论 -
13.[LeetCode]Roman to Integer
class Solution {public: int romanToInt(string s) { //此处用到了map map<char,int> m; //通过下表添加map对象 m['I'] = 1; m['V'] = 5; m['X'] = 10; m['L'] = 5原创 2016-05-02 20:45:57 · 191 阅读 · 0 评论 -
235.[Leetcode]Lowest Common Ancestor of a Binary Search Tree
class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { TreeNode* temp = root; //首先如果根节点和其中一个相同,那么肯定返回根节点 if(temp == q || temp ==原创 2016-05-02 20:46:45 · 248 阅读 · 0 评论 -
198.[Leetcode]House Robber
题意:给定一串数字,让你选择其中一些数字,选的数字不能相邻,那么选的数字的最大和是多少?我的解法:这又是一个典型的动态规划求最优的问题,但是一开始我还是没有想明白。简单的说就是这一个公式: max_sum(i) = max(max_sum(i-2) + nums[i], max_sum(i-1))java代码如下:// 明显是动态规划的问题public class Solution {原创 2016-05-13 14:20:04 · 255 阅读 · 0 评论 -
27.[Leetcode]
题意:在不新建一个字符串的情况下来去除指定的值我的思路:public class Solution { public int removeElement(int[] nums, int val) { int l = 0; for(int i=0; i<nums.length;i++){ int temp = nums[i];原创 2016-05-13 15:21:40 · 212 阅读 · 0 评论 -
283.[LeetCode]Move Zeros
题意:将所有的0,移动到vector的后面 比如; [1,3,0,12,5] -> [1,3,12,5,0]我的解法: 两次循环 第一次去掉所有为0的项,并同时记录去掉的次数 count;而且重要的事,只要在去掉 0 的操作之后,迭代器的位置应该是不变的; 第二次循环count次,为nums后面添加 0 void moveZeroes(vector<int>& nums)原创 2016-04-19 13:19:18 · 266 阅读 · 0 评论 -
110.[Leetcode]Balanced Binary Tree
题意:判断一个二叉树是不是平衡二叉树别人的思路:使用递归对于每一个点判断是否平衡点,所以需要一个计算此点深度的getDepth()方法int getDepth(TreeNode *node){ int left =0; int right=0; if (node == NULL) return 0; if (node->left != NULL) le原创 2016-05-13 18:07:16 · 278 阅读 · 0 评论 -
237.[LeetCode]Delete Node in Linked List
题意:删除一个单链中的结点我的解法: 堪称非常愚蠢,我把每一项都复制给了前一项,然后将最后一个结点设为NULL void deleteNode(ListNode* node) { while(node->next!=NULL){ node->val = node->next->val; if(node->next->next原创 2016-04-19 19:36:50 · 241 阅读 · 0 评论 -
101.[Leetcode]Symmetric Tree
题意:判断一个二叉树是不是对称的我的思路: 递归但是不是一般的那种递归,那种递归我是想不出来的,因为觉得子节点是否是对称和父节点着实没什么关系。我用递归遍历一个节点的左右节点,并记录在栈里,同时遍历其右左(顺序相反)记录在栈之后比较两个栈即刻。节点为空要置为 -1,一个不会再val出现的值 非常重要注意:边际条件,根为空的时候返回true; //第一种方法坑定是递归,但是不是一般的递归,一般的原创 2016-05-14 14:20:28 · 249 阅读 · 0 评论 -
83.[Leetcode]Remove Duplicates from Sorted List
题意:从一个排好序的链表中去重我的解法:设置两个指针,firstNode 和 lastNode,移动指针lastNode,如果两者所指的Node的val相同,则向后移动一位LastNode。如果两者所指的不同,则将firstNode的next指向lastNode,并且移动fristNode到lastNode处 (其实看代码应该更好理解一些)class Solution {public:原创 2016-05-04 13:12:30 · 234 阅读 · 0 评论 -
70.[Leetcode]Climbing Stairs
题意:一次只能走1级,或者2级,给你一个n级的楼梯,一共有多少种走完的方法我的算法:一开始肯定是想用递归,递归会很简答的写完,但是发现,到44这个测试样例就超时了所以得用非递归,经过前面几个题的提醒,先试试找规律1-1 | 2-2 | 3-3 | 4-5 | 5-8 | 6-13 ….斐波那契数列啊!// 我选择使用递归的算法// 可以是可以,但是会超时// 所以想想非递归的算法// 发现是个原创 2016-05-04 13:35:38 · 212 阅读 · 0 评论 -
231.[Leetcode]Power of Two
题意:求一个数是不是2的幂我的思路一路除下去,只要有余数,就说明不是但是求次方的要记住两个特殊值0 不是任何数的次方 1 是任何数的次方class Solution {public: bool isPowerOfTwo(int n) { if (n == 1) return true; if (n == 0) return false; w原创 2016-05-04 14:18:44 · 192 阅读 · 0 评论 -
107[Leetcode].Binary Tree Level Order Traversal II
我的思路vector<vector<int>> levelOrderBottom(TreeNode* root) { queue<TreeNode*> s1,s2; vector<vector<int>> vv; //边际条件 if(root != NULL) s1.push(root); else re原创 2016-05-15 09:47:21 · 246 阅读 · 0 评论 -
66.[Leetcode]Plus One
我的思路还是灰常简单的一个题class Solution {public: vector<int> plusOne(vector<int>& digits) { int size = digits.size(); for(int i = size-1; i >= 0; i--){ if(++digits[i] < 10) break;原创 2016-05-15 16:01:33 · 218 阅读 · 0 评论 -
202.Happy Number
题意求一个数是不是happy number,定义在官网题目下很清楚,这里就不赘述我的算法首先要考虑如果不出现1会怎么样,我猜测是会出现循环的,不然这题无解 题外:总是忘记了求平方要用 power(x,y)而不是 x^2, 导致错误// c++class Solution {public: bool isHappy(int n) { set<int> s;原创 2016-05-04 19:18:30 · 216 阅读 · 0 评论 -
26.[Leetcode]Remove Duplicates from Sorted Array
我的思路优先考虑用两个指针将后面的提前class Solution {public: int removeDuplicates(vector<int>& nums) { int i = 0, j = 0; for(; j < nums.size(); j++){ if(nums[i] != nums[j]){原创 2016-05-16 07:26:22 · 223 阅读 · 0 评论 -
118.[Leetcode]Pascal's Triangle
我的解法vector<vector<int>> generate(int numRows) { vector<vector<int>> vv; vector<int> v,vtemp; for(int i=0;i<numRows;i++){ for(int j=0; j<vtemp.size()+1;j++){原创 2016-05-16 08:47:41 · 256 阅读 · 0 评论 -
121.[Leetcode]Best Time to Buy and Sell Stock
题意 :给你一串股票数字,你有一次的买入和卖出的机会,求最大的收益(卖出-买入)是多少?我的思路:一开始想的是双循环,果断超时。查询了一下这里要用到动态规划的思想:那么什么是动态规划呢? 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法 把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个原创 2016-05-05 16:45:09 · 277 阅读 · 0 评论 -
21.[Leetcode]Merge Two Sorted Lists
题意:归并两个排好序的链表我的思路;我们没有考虑递归的方法,也没有想到用递归解决,先贴出c++的非递归/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}原创 2016-05-05 18:08:54 · 222 阅读 · 0 评论 -
24.[Leetcode]Swap Nodes in Pairs
题意:交换相邻(adjacent)的节点我的思路;//c++ recursive,效率是不高但是比较短class Solution {public: ListNode* swapPairs(ListNode* head) { if(!head || !(head->next)) return head; ListNode *c = head, *n = h原创 2016-05-05 20:54:33 · 277 阅读 · 0 评论 -
342.[leetcode]Power of four
这个题要求不用循环和递归,想了半天没想出来,但是找到一个超神的算法,好看而且好理解// 4的二进制是0,1相隔的状态class Solution {public: bool isPowerOfFour(int num) { return ((num-1)&num)==0 && (num-1)%3==0; }};原创 2016-05-16 22:38:19 · 245 阅读 · 0 评论 -
172.[Leetcode]Factorial Trailing Zeroes
题意:给一个数 n,计算n!的后面有几位0我的解法://计算其中有多少个5就可以了class Solution {public: int trailingZeroes(int n) { int count(0); while(n/5 > 0){ n /= 5; count += n; }原创 2016-05-17 13:08:22 · 231 阅读 · 0 评论 -
9.[Leecode]Palindrome Number
题意:求一个数是不是回文数我的解法:将此数倒过来,如果一样,那么就是回文数public class Solution { public boolean isPalindrome(int x) { int cache = x; int math = 0; while(x > 0){ math *= 10;原创 2016-05-18 15:33:57 · 239 阅读 · 0 评论 -
112.[Leetcode]Path Sum
题意:求给定一个树,是否存在一个路径可以产生一个给定的值递归:public class Solution { public boolean hasPathSum(TreeNode root, int sum) { if (root == null) return false; // 边际条件 else { // 一个节点是叶子节点的充分原创 2016-05-18 16:28:26 · 277 阅读 · 0 评论 -
100.[LeetTree]Same Tree
题意:判断两棵树是否相同,相同条件:1.形状相同;2.每个节点的值相同思路:递归:两个树是相同的也就是要判断,根节点相同,且 子树 相同class Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL && q == NULL){ //如果两个节点都是nuLL,说明到达底部了,原创 2016-04-23 19:39:45 · 238 阅读 · 0 评论 -
242.[LeetCode]Valid Anagram
题意:判断两个字符串是否包含同样的字符,内容相同只有顺序不同我的思路:给两个字符串排序,然后作比较 这样大部分的工作都可以由函数库完成了,排序要加的头文件#include “algorithm”,求绝对值要加的头文件 #include “math.h”class Solution {public: bool isAnagram(string s, string t) { s原创 2016-04-23 21:32:32 · 199 阅读 · 0 评论 -
171.[LeetCode]Excel Sheet Column Number
题目:Related to question Excel Sheet Column TitleGiven a column title as appear in an Excel sheet, return its corresponding column number.For example:A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 我原创 2016-04-23 22:55:55 · 238 阅读 · 0 评论 -
349.[Leetcode]Intersection of Two Arrays
题意:求两个数组的交集利用set的特性class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { set<int> s1(nums1.begin(),nums1.end()); set<int> s2(nums2.begin(),nums原创 2016-05-19 14:17:21 · 238 阅读 · 0 评论 -
36.[Leetcode]Valid Sudoku
题意:判断一个数阵是否可以数独我的解法(慢): Point:写这个我遇到了一个非常大的问题,就是关于容器的容器的初始化问题,代码中://必须要这么初始化才可以在后面使用vector<char> temp;vector<vector<char>> col(9,temp);vector<vector<char>> group(9,temp);// 要好好研究一下 vector 的初始化问题了原创 2016-05-19 18:12:12 · 286 阅读 · 0 评论