剑指offer刷题(一)

一.二维数组的查找

题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

public class Solution {
    public static void main(String[] args) {
        int[][] array = new int[][]{{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
        boolean res = Find(7, array);
        System.out.println(res);
    }

    //第一种方法
    public static boolean Find(int target, int [][] array) {
        if(array==null){
            return false;
        }
        //列数
        int colSize = array[0].length;
        //行数
        int rowSize = array.length;
        //首先在第一行依次的往后查找
        for(int i = 0 ; i < colSize; i++){
            if(array[0][i]>target){
                return false;
            }
            System.out.println("第"+(i+1)+"列");
            //每一列的最后一个值为最大值
            for(int j = 0 ;j < rowSize; j++){
                System.out.println(array[j][i]);
                if(array[rowSize-1][i] target){
                        max = mid - 1;
                    }else{
                        min = mid + 1;
                    }
                }
            }
        }
        return false;
    }

    //第二种方法
    public boolean Find2(int target, int [][] array) {
        if(array==null){
            return false;
        }
        //列数
        int colSize = array[0].length;
        //行数
        int rowSize = array.length;

        int rowNum = rowSize-1;
        int colNum = 0;

        while(colNum=0){
            if(target == array[rowNum][colNum]){
                return true;
            }else if(target>array[rowNum][colNum]){
                colNum++;
            }else {
                rowNum--;
            }
        }
        return false;
    }
}

二.替换空格

题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

public class Solution2 {
    //第一种方法 直接调API替换
    public String replaceSpace(StringBuffer str) {
        if (str==null || str.toString().equals(""))return str.toString();
        for (int i = 0;i=0 && indexold

三.从头到尾打印链表

题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

public class Solution3 {
    public ArrayList printListFromTailToHead(ListNode listNode) {
      //第一种方法 普通插入方法
        ArrayList list = new ArrayList<>();
        while(listNode!=null){
            list.add(0, listNode.val);
            listNode=listNode.next;
        }
        return list;

    }

    //第二种方法  stack
    public ArrayList printListFromTailToHead2(ListNode listNode) {

        Stack stack=new Stack();
        while(listNode!=null){
            stack.push(listNode.val);
            listNode=listNode.next;
        }

        ArrayList list=new ArrayList();
        while(!stack.isEmpty()){
            list.add(stack.pop());
        }
        return list;
    }

    //第三种方法  递归
    public ArrayList printListFromTailToHead3(ListNode listNode) {

        ArrayList list=new ArrayList();
        addListNodeVal(list , listNode);
        return list;
    }

    private void addListNodeVal(ArrayList list , ListNode listNode) {
        if(listNode!=null){
            if(listNode.next!=null){
                addListNodeVal(list,listNode.next);
            }
            list.add(listNode.val);
        }
    }

    class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
}

你可能感兴趣的:(剑指offer刷题(一))