原创 劍指Offer----反轉鏈表

輸入一個鏈表,反轉鏈表後,輸出鏈表的所有元素。 /* public class ListNode {     int val;     ListNode next = null;     ListNode(int val) {      

原创 劍指Offer----順時針打印矩陣

輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5

原创 劍指Offer----棧的壓入、彈出序列

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否爲該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可

原创 劍指Offer----包含min函數的棧

定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。 import java.util.Stack; public class Solution { Stack<Integer> data = new Stack<In

原创 劍指Offer----跳臺階

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。 解題思路:1.斐波那契數列 public class Solution { public int JumpFloor(int target

原创 劍指Offer----旋轉數組的最小數字

       把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。 輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。 NOT

原创 劍指Offer----二叉搜索樹的後序遍歷序列

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No假設輸入的數組的任意兩個數字都互不相同。 import java.util.Arrays; public class Solution {

原创 劍指Offer----鏈表中倒數第k個節點

輸入一個鏈表,輸出該鏈表中倒數第k個結點。方法一: /* public class ListNode { int val; ListNode next = null; ListNode(int val) {

原创 劍指Offer----二叉樹的鏡像

操作給定的二叉樹,將其變換爲源二叉樹的鏡像。 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null

原创 劍指Offer----合併兩個排序的鏈表

輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。 /* public class ListNode { int val; ListNode next = null; L

原创 劍指Offer----重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。

原创 劍指Offer----二進制中1的個數

輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。 錯誤解法: public class Solution { public int NumberOf1(int n) { int num=0;