剑指offer
ddxu
啊啊啊
展开
-
牛客网:剑指offer:把数组排成最小的数(java)
我是在牛客上刷的这个题,牛客上的原题是:我用的方法是先将数组排序,然后用BigInteger判断组合后的整数大小,从而决定组合方式。AC代码如下:import java.util.ArrayList;import java.math.BigInteger;public class Solution { public String PrintMinNumber(int [] nu原创 2016-12-10 11:28:56 · 439 阅读 · 0 评论 -
剑指offer-整数中1出现的次数(从1到n整数中1出现的次数)
转自:http://blog.csdn.net/huzhigenlaohu/article/details/51779365整数中1出现的次数(从1到n整数中1出现的次数)求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer转载 2016-12-10 10:14:22 · 314 阅读 · 0 评论 -
牛客:剑指offer:孩子们的游戏(圆圈中最后剩下的数) (Java)
转自:http://blog.csdn.net/crazy__chen/article/details/45115911题目描述:解法1:找规律。首先定义最初的n个数字(0,1,…,n-1)中最后剩下的数字是关于n和m的方程为f(n,m)。在这n个数字中,第一个被删除的数字是(m-1)%n,为简单起见记为k。那么删除k之后的剩下n-1的数字为0,1,…,k-1,k+1,…,n-转载 2016-12-12 11:29:04 · 1457 阅读 · 0 评论 -
牛客:剑指offer:扑克牌顺子 (Java)
题目描述:解析:随机抽的5张牌可以看成5个数字组成的数组,大、小王是特殊的数字,不妨定义为0.接下来只要判断5个数字是不是连续的。最直观的方法是排序,然后用0去补满数组中的空缺。如果排序后的数组不是连续的,即相邻的两个数字都相隔若干个数字,但只要我们有足够的0可以补满这两个数字的空缺,这个数组实际上还是连续的。除此之外,还要注意非0数字重复出现,则该数组不是连续的。代码:先对数组排原创 2016-12-12 11:13:22 · 483 阅读 · 0 评论 -
牛客:剑指offer:翻转单词顺序列 (Java)
题目描述:解析:这个题目看上去很简单,思路就是把句子按空给切分(split)为一个个的单词,然后从后往前存入返回的字符串中就行。但是我并没有一次AC,原因是因为对于全是空格的句子,我用split切分后就什么也没有了,就会返回"",会报错,所以对于切分后的长度进行判断,如果len为0,则说明原字符串都是空格,所以这时返回原字符串就行了。public class Solution原创 2016-12-12 10:43:39 · 400 阅读 · 0 评论 -
牛客:剑指offer左旋转字符串 java
题目描述:解析:看到这个我们想到的肯定都是将字符串前面的0-n剪下来放到字符串后面就可以了,可能是我JS用的比较多,所以马上就想到用String自带的字符串切分方法。public class Solution { public String LeftRotateString(String str,int n) { String res = "";原创 2016-12-12 10:29:05 · 358 阅读 · 0 评论 -
牛客:剑指offer:和为S的连续正数序列 (Java)
题目描述:解析:看到这个题目,我想到的办法是i从1开始遍历到mid=(sum+1)/2,每次求i开始直到mid的和,中间找到和为sum的就存到结果res中。但是这个效率太低,每次都要遍历i到mid次。import java.util.ArrayList;public class Solution { public ArrayList > FindContinuousSeq原创 2016-12-12 09:21:41 · 225 阅读 · 0 评论 -
牛客:剑指offer:数组中只出现一次的数字 (Java)
题目描述:看到这个题目我首先想到的方法就是,遍历数组,用一个map来装没有出现过的数,如果map中已经有这个数了,就说明这个数是第2次出现了,所以把这个数从map中remove掉,这样遍历一遍后map中就只会剩下只出现一次的那两个值。代码实现如下://num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果import java.util.原创 2016-12-10 16:58:49 · 439 阅读 · 0 评论 -
牛客:剑指offer:平衡二叉树 (Java)
题目描述:解析:因为我是看了牛客上leetcode的那些题,然后才来看剑指offer的,剑指offer里基本都是leetcode上的原题,所以已经会做了。这个题是对上一个题(求二叉树的最大深度)的应用,平衡二叉树的定义:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。通过定义我们就知道如何判断一棵二叉树是否是平衡二叉树了,空树和原创 2016-12-10 16:15:34 · 1081 阅读 · 0 评论 -
牛客:剑指offer:二叉树的深度(Java)
题目:解析:二叉树的深度是所有节点的最大深度。二叉树的问题一般通过递归可以实现,从二叉树的根节点开始,树的深度等于左子节点深度和右子节点深度的最大值加上1(根节点),递归调用即可。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;原创 2016-12-10 15:57:19 · 304 阅读 · 0 评论 -
牛客:剑指offer:数字在排序数组中出现的次数 (Java)
牛客上的题目描述:解析:这个题目很简单,因为是排序好的数组,所以数字k出现的位置是连续的,所以可以在计算res大于0,且array[i] != k后就返回,因为后面不会再有k出现了。代码如下:public class Solution { public int GetNumberOfK(int [] array , int k) { if(array =原创 2016-12-10 15:13:45 · 240 阅读 · 0 评论 -
牛客:剑指offer:两个链表的第一个公共结点(Java)
题目:看到这个题,我想到的就是最笨的办法,先遍历两个链表,算出各自的长度,然后让长的链表先走Math.abs(l1-l2)步,然后两个指针再一起走,当指向同一个节点时就找到了公共节点。虽然觉得这个办法太老了,但是暂时也没有想到新方法。/*public class ListNode { int val; ListNode next = null; List原创 2016-12-10 15:03:30 · 274 阅读 · 0 评论 -
牛客:剑指offer:丑数(Java)
牛客上对应题目:解析:方法一:逐个判断每个整数是不是丑数的解法,直观但不够高效:所谓一个数m是另一个数n的因子,是指n能被m整除,也就是说n%m==0.根据丑数的定义,丑数只能被2,3,5整除。也就是说如果一个数能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果能被5整除,就除以5.如果最后我们得到的是1,那么这个数就是丑数,否则不是。方法二:下一个原创 2016-12-10 11:57:03 · 779 阅读 · 0 评论 -
牛客:剑指offer:顺时针打印矩阵 (Java)(同leetcode的spiral matrix i 和ii)
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.leetcode的spiral matrix:Given a matrix of m x n elements (m row原创 2016-12-15 10:53:14 · 431 阅读 · 0 评论