- 博客(42)
- 资源 (3)
- 收藏
- 关注
原创 LeetCode Reverse String(字符串反转)
题意:给出一个字符串,将其反转 代码如下: public class Solution { public String reverseString(String s) { StringBuilder sb = new StringBuilder(s); int left = 0, right = sb.length() - 1;
2016-06-30 14:32:46 1049
原创 LeetCode Reverse Vowels of a String(字符串中元音字符反转)
题意:给出一个字符串,仅将元音字符反转 思路:设置两点,一个从左开始,一个从右开始,分别找到元音字符,然后替换 代码如下: public class Solution { private boolean isVowel(char ch) { ch = Character.toLowerCase(ch); switch(ch)
2016-06-30 14:27:53 421
原创 LeetCode Integer Break(整数拆分问题)
题意:给出一个大于等于2的正整数,将其拆分成若干个整数的和,使得其积最大 思路:在大于4的情况下,将其拆分成若干个3的和,这种情况下积是最大的 代码如下: public class Solution { public int integerBreak(int n) { if (1 == n) return 1; else if (2 == n)
2016-06-30 11:45:27 740
原创 LeetCode Count Numbers with Unique Digits(计数问题)
题意:给出一个整数,求在[0,10^n]之间各位数字不相同的数的个数 思路:n为1时,有10个 n为2时, 十位数只能是1-9,而个数位可以为0,所以也是有9种选择 n为3时,百位数有9种选择,十位数有9种选择,个数数有8种选择 依此类推 代码如下: public class Solution { public int countNumbersWit
2016-06-30 11:29:59 595
原创 LeetCode Water and Jug Problem(巧妙转换为gcd问题)
题意:给出x,y升水壶,问是否可以量出z升水。有三种操作:填满水壶,清空水壶、 从其中一个水壶倒入另一个水壶 代码如下: public class Solution { private int gcd(int a, int b) { return 0 == b ? a : gcd(b, a % b); } public boolean canMe
2016-06-29 17:03:53 675
原创 LeetCode Valid Perfect Square(是否是平方数)
题意:给出一正整数,不用 sqrt函数,判断该数是否是平方数 思路: 第一种,连续奇数和为平方数 代码如下: public class Solution { public boolean isPerfectSquare(int num) { for (int i = 1; num > 0; i += 2) { num -= i
2016-06-29 12:03:15 1716
原创 LeetCode Largest Divisible Subset(动态规划)
题意:给出一个数组,找出子集合,使得每对可以除尽 思路:将数组从小到大排序,用动态规划方法 代码如下: public class Solution { public int[] largestDivisibleSubset(int[] nums) { if (null == nums || 0 == nums.length) return nums;
2016-06-27 15:46:12 893
原创 LeetCode Integer to Roman(数字转罗马)
题意:给出一个1到3999之间的数,求其罗马的表示法 思路:罗马数字中I(1), V(5), X(10), L(50), C(100), D(500),M(1000) 记数规则为: (1)相同的数字连写,所表示的数等于这些数字相加得到的数 (2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数 (3)小的数字(限于I,X和C)在大的数字的左边,所表示的数等于大数减小数得到的数
2016-06-26 17:54:04 402
原创 LeetCode Roman to Integer(罗马数字转换)
思路: 罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法: 相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3; 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12; 小的数字(限于
2016-06-22 18:34:53 569
原创 LeetCode Add Binary(二进制加法)
思路:大整数加法 代码如下: public class Solution { public String addBinary(String a, String b) { StringBuilder sb = new StringBuilder(); int i; int c = 0; StringBuilder
2016-06-22 14:18:06 492
原创 LeetCode Excel Sheet Column Title(表格列数数字到英文转换)
题意:将列数转换成 excel中的英文表示法 思路:如果能被26整除,说明尾部是Z,将当前数减去26,否则就是当前数对26取余对应的字母 代码如下: public class Solution { public String convertToTitle(int n) { StringBuilder sb = new StringBuilder();
2016-06-22 13:19:01 1193
原创 LeetCode Excel Sheet Column Number(进制转换问题)
题意:给出excel表格中的列的表示形式,问是第多少列 思路:进制转换问题 代码如下: public class Solution { public int titleToNumber(String s) { int colNum = 0; for (int i = 0; i < s.length(); i++) {
2016-06-22 11:22:39 558
原创 LeetCode Factorial Trailing Zeroes(计算阶乘结果尾部有几个0)
思路:计算n能被5,25,。。。b整除的个数 代码如下: public class Solution { public int trailingZeroes(int n) { int sum = 0; while (n > 0) { sum += n / 5; n /= 5;
2016-06-22 11:16:51 412
原创 LeetCode Rectangle Area
题意:给出两个矩形,求其面积和 思路:两个矩形可能相交,在求相交面积时,左下角取两个矩形左下角的最大值 ,右上角取两个矩形对应坐标的最小值 ,如果求得的左下角大于右下角,说明不相交,面积为两个矩形面积之和,否则为两个矩形面积之和减去相交面积。 代码如下: public class Solution { public int computeArea(int A, int B, int
2016-06-22 08:31:43 415
原创 LeetCode Add Digits(计算数位的和)
题意:给出一个数,求将其各位数相加起来后的和,直到小于10 思路:参考https://en.wikipedia.org/wiki/Digital_root 代码如下: public class Solution { public int addDigits(int num) { if (0 == num) return 0; else if (
2016-06-21 16:33:45 423
原创 LeetCode Ugly Number
题意:给出一个数,判断是否是丑数。质因数只包含2,3,5的 代码如下: public class Solution { public boolean isUgly(int num) { if (num <= 0) return false; int[] nums = {2, 3, 5}; int tmp = num;
2016-06-21 16:21:04 284
原创 LeetCode Power of Three
题意:不用循环,判断一个数是否是3的幂 思路:通过判断指数是否是整数 注意用Math.log函数有的返回不正确,用Math.log10 代码如下: public class Solution { public boolean isPowerOfThree(int n) { if (0 == n) return false; double
2016-06-21 16:13:10 322
原创 LeetCode Merge k Sorted Lists(有序单链表数组的合并)
题意:给出一个有序单链表数组,将其合并成一个有序单链表 思路:将其转化成两个单链表合并的问题,用递归方式来实现 代码如下: public class Solution { private ListNode mergeTwo(ListNode l1, ListNode l2) { if (null == l1) return l2; if (nu
2016-06-21 14:24:08 402
原创 LeetCode Reverse Nodes in k-Group(单链表连续分段反转)
题意:给出一个单链表及反转元素的个数,求反转后的单链表 思路:首先确定链表总结点数,根据反转元素的个数,可以知道要返回多少次。第一次返回的尾为新的单链表的头,而后序反转后的变成前一次反转后发尾部元素的后继结点 具体代码如下: public class Solution { public ListNode reverseKGroup(ListNode head, int k)
2016-06-21 13:03:24 1226
原创 php中的学习笔记
1、数组中有unicode编码时,用json_encode的选项JSON_UNESCAPTED_UNICODE来转化为utf8
2016-06-21 10:58:15 403
原创 LeetCode Convert Sorted List to Binary Search Tree(有序单链表转为平衡二叉树)
题意:给出一个有序的单链表,将其转换成平衡二叉树 思路:因为是有序的,所以可以将其分成两部分,前部分作为左子树,后部分作为右子树 代码如下: class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } class TreeNode { int val; TreeNo
2016-06-13 20:58:49 1086
原创 LeetCode Sort List(单链表归并排序)
题意:给出一个单链表,将其排序,要求时间复杂度O(nlgn) 思路:用归并排序,取链表的一半,在取一半时,不用先计算总结点个数,一个每次走两步,一个每次走一步,当走的快的结束是,慢的已经到总结点的一半了 代码如下: class Solution { private ListNode mergeListNode(ListNode l1, ListNode l2) {
2016-06-13 20:29:15 536
原创 LeetCode Partition List(链表分段)
题意:给出一个单链表,有参数的数x。将比x小的数排在比x大的数据后面 思路:类似于快速排序的分段处理。为了简单操作,在单链表前加个头结点。注意,在处理时,如果当前处理结点与被替换结点为同一结点结,两个都下移,否则会出现环 代码如下: class Solution { public ListNode partition(ListNode head, int x) {
2016-06-13 15:21:43 977
原创 LeetCode Insertion Sort List(单链表插入排序)
题意:给出一个未排序好的单链表,用插入排序来实现排序 代码如下: class Solution { public ListNode insertionSortList(ListNode head) { if (null == head || null == head.next) return head; ListNode dummy = new
2016-06-10 14:27:18 500
原创 SPOJ 27020 GST Calculator
比较简单,贴代码: import java.io.*; import java.util.Scanner; class Main implements Runnable{ private static boolean DEBUG = false; private static Scanner cin; private static PrintWriter cout;
2016-06-08 21:54:03 498
原创 LeetCode Rotate List
题意:给出一个单链表,将其右旋转k,其中k为非0 思路:首先统计单链表的结点数,因为k可能大于这个。将k转成小于单链表的结点数,先从头开始遍历k个,在继续遍历时,另一个从头开始,当遍历到尾时,另一个已经到离右边的第 k个。 代码如下: class Solution { public ListNode rotateRight(ListNode head, int k) {
2016-06-08 13:00:41 226
原创 LeetCode Add Two Numbers
题意:链表加法 代码如下: class Solution { ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode cur1 = l1, cur2 = l2; int carry = 0; ListNode phead = null, ptail = null;
2016-06-07 18:17:31 287
原创 LeetCode Remove Duplicates from Sorted List II
题意:给出一个单链表 ,将其中重复的元素删除 思路:在找重复结点时,需要找到其前继结点 代码如下: class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode cur = head, next = null, prev = null; if (null
2016-06-07 18:07:27 270
原创 LeetCode Reverse Linked List II
链表局部反转问题 代码如下: class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if (m == n) return head; ListNode cur = head, pre = null; int cnt =
2016-06-07 16:52:48 226
原创 LeetCode Reorder List
题意:给出一个链表,重新排列链表,形式为第一个-->倒数第一个->第二个->倒数第二个 思路:将数组分成两半,然后将后半部反转,再拼接 代码发下: class Solution { public void reorderList(ListNode head) { if (null == head || null == head.next
2016-06-06 20:23:22 297
原创 LeetCode Linked List Cycle II
题意:给出一个链表,判断是否有环,如果有环,输出环的起点,如果没有,输出null 思路:从起点开始,一个每次走一步,一个每次走两步,如果两点出现重合,说明有环,此时,一个从起点开始,另一个从重合点开始,两个每次走一次,此时重合点就是环的起点 代码如下: class Solution { public ListNode detectCycle(ListNode head) {
2016-06-06 18:53:51 258
原创 LeetCode Linked List Cycle
题意:判断链表中是否有环 思路:从起点开始,一个每次移动一步,另一个每次移动两步,如果相遇,说明有环 代码如下: class Solution { public boolean hasCycle(ListNode head) { ListNode slow = head; if (null == head) return false;
2016-06-06 18:29:49 225
原创 LeetCode Swap Nodes in Pairs
题意:给出一个单链表,每两个一组相互交换,不能通过交换每组的值来实现 思路: 1、链表为空或者只有一个结点,不需要交换 2、有两个结点时p,q,其中q = p.next,交换用p.next = q.next,q.next = p 3、在有多于2个结点时,以4个为例,前一组交换后的结点的后继结点应该是后一组结点未交换前的第二个 具体代码如下: class ListNode { i
2016-06-04 16:44:32 297
原创 LeetCode Merge Two Sorted Lists
题意:合并两个已排好链表,使其也是排好序的 思路: 在遍历两个链表时,比较当前两个结点的值,总是选择最小结点到新链表中,同时最小结点所在的链表中的结点移动到下一个 代码如下: class ListNode { int val; ListNode next; ListNode(int x) { val = x;} } class Solution { pub
2016-06-04 15:45:10 234
原创 LeetCode Remove Nth Node From End of List
题意:给出一个单链表,删除从尾部开始的第n个元素 思路: 从头开始遍历n个元素,此时当前结点指向头开始的第n+1个元素。继续遍历同时,另外一个结点记录从头开始至遍历结束时的所经历的结点,这个结点就是要删除结点的前继结点 代码如下: class ListNode { int val; ListNode next; ListNode(int x) { val = x;}
2016-06-04 15:09:55 250
原创 LeetCode Remove Linked List Elements
题意:删除数组中的指定元素 思路:在遍历链表时,记录前继结点和当前结点,如果胶继结点为空,说明是头结点,当前结点移动时,头结点也随着移动。当要找的结点在链表中时,将前继结点的后继结点修改为当前结点的后继结点,同时更新当前结点;当不是要找的结点时,更新前继结点和当前结点 代码如下: class ListNode { int val; ListNode next; Lis
2016-06-04 11:30:49 322
原创 LeetCode Palindrome Linked List
题意:判断链表是否对称的 思路:先计算链表结点数,然后将前半链表反转,然后再比较将半部和后半部是否相等 代码如下: class ListNode { int val; ListNode next; ListNode(int x) { val = x;} } class Solution { public boolean isPalindrome(ListNo
2016-06-04 11:11:49 321
原创 LeetCode Odd Even Linked List
题意:给出一个单链表,将位于奇数位和偶数位的分组,重新组成链表,要求空间复杂度为O(1) 思路:用四个结点,其中两个表示奇数链表的头和尾,另外两个表示偶数链表的头和尾,注意,偶数链表的尾可能为空或者不为空,在不为空时,需要将下一结点置为空 代码如下: class Solution { public ListNode oddEvenList(ListNode head) {
2016-06-04 10:38:45 300
原创 LeetCode Top K Frequent Elements
题意:给出一个数组,求出前k个出现频率最多的数 思路:首先统计每个元素的次数(用Map),然后用堆排序只统计前k个(PriorityQueue) 代码如下: class Solution { class Pair implements Comparable { int key, value; public int compareTo(Pair
2016-06-04 10:06:11 515
Ubuntu Linux实用学习教程.pdf
2009-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人