在一個二維數組中(每一個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。java
最外層保證不出數組邊界,從左上角開始,依次向深層遞歸數組
public class Solution { public boolean Find(int target, int [][] array) { int i=0; int j=0; return func(i,j,array,target); //從array[0][0]開始遞歸 } public boolean func(int i,int j,int [][] array, int target){ int row = array.length; int col = array[0].length; if(i >= row || j >= col){ //保證沒有出界 return false; } if(array[i][j] < target){ //向下和向右遞歸 return func(i+1,j,array,target)||func(i,j+1,array,target); }else if(array[i][j]==target){ return true; }else{ return false; } } }
請實現一個函數,將一個字符串中的每一個空格替換成「%20」。例如,當字符串爲We Are Happy.則通過替換以後的字符串爲We%20Are%20Happy。app
感受沒啥思路的函數
public class Solution { public String replaceSpace(StringBuffer str) { while(str.indexOf(" ")!=-1) { str.replace(str.indexOf(" "), str.indexOf(" ")+1, "%20"); } return str.toString(); } }
輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。題目給定了鏈表節點的類定義:this
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/spa
關鍵在於一個反轉鏈表,一個起始指針,一個終止指針,兩者互換值,並不斷靠近,當起始指針在終止指針右邊或相遇時結束指針
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> arr = new ArrayList<>(); if(listNode==null) { return arr; } arr.add(listNode.val); while(listNode.next!=null) { listNode = listNode.next; arr.add(listNode.val); } int i = 0; int j = arr.size()-1; for(;i<=j;i++,j--) { int temp = arr.get(i); arr.set(i, arr.get(j)); arr.set(j, temp); } return arr; } }
把一個數組最開始的若干個元素搬到數組的末尾,咱們稱之爲數組的旋轉。 輸入一個非減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。 NOTE:給出的全部元素都大於0,若數組大小爲0,請返回0。code
第一個注意的是,數組爲空的時候,返回0;排序
第二個注意的是旋轉數組只搬一次;遞歸
第三個注意的是,若干個元素包含0個元素的狀況。
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { if(array.length == 0){ return 0; }else{ for(int i=0;i<array.length-1;i++){ if(array[i+1]<array[i]){ return array[i+1]; } } return array[0]; } } }
你們都知道斐波那契數列,如今要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項爲0)。
n<=39
感受沒什麼好說的
public class Solution { public int Fibonacci(int n) { if(n==0){ return 0; } if(n==1||n==2){ return 1; } int a = 1; int b = 1; int temp; for(int i=3;i<=n;i++){ b = a+b; temp = a; a = b; b = temp; } return a; } }
一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(前後次序不一樣算不一樣的結果)。
參考第5題
一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級……它也能夠跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
計算事後發現就是2的target-1次方
public class Solution { public int JumpFloorII(int target) { return (int)Math.pow(2,target-1); } }
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
侮辱智商的題目
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindKthToTail(ListNode head,int k) { int count=0; ListNode p = head; while(p!=null){ count+=1; p=p.next; } if(k>count){ return null; } p = head; for(int i=1;i<=count-k;i++){ p = p.next; } return p; } }