剑指offer练习题5

JZ4 重建二叉树
链接: 题目链接.
在这里插入图片描述

  1. 分析
    利用该二维数组的性质:

每一行都按照从左到右递增的顺序排序,
每一列都按照从上到下递增的顺序排序
改变个说法,即对于左下角的值 m,m 是该行最小的数,是该列最大的数
每次将 m 和目标值 target 比较:

当 m < target,由于 m 已经是该列最大的元素,想要更大只有从行考虑,取值右移一位
当 m > target,由于 m 已经是该行最小的元素,想要更小只有从列考虑,取值上移一位
当 m = target,找到该值,返回 true
用某行最小或某列最大与 target 比较,每次可剔除一整行或一整列

public class Solution {
    public boolean Find(int target, int [][] array) {
        int cow = array.length;
        if(cow == 0){
            return false;
        }
        int row = array[0].length;
        if(row == 0){
            return false;
        }
        int i = 0;
        cow = cow-1;
        while(cow >= 0 && i <row){
            if(array[cow][i] < target){
                i++;
            }else if(array[cow][i] > target){
                cow--;
            }else{
                return true;
            }
        }
        return false;
    }
}

JZ2 替换空格
链接: 题目链接.
在这里插入图片描述

字符串相关知识:
定义字符串:String str = new String(“duanduanduan”);
str. charAt(int index)------取得指定索引位置的字符,索引从0开始。
char[] char2 = new char[]{1,2,3};
System.out.println(Arrays.toString(char2));-----将整型数组变成字符串的另一种方法,并且字符串带中括号。
str.contains(字符串)------判断该字符串是否被str包含。
str.toCharArray()------将字符串变为字符数组返回。

char[] char1 = {‘1’,‘2’,‘3’,‘4’};
String str2 = new String(char1);----将数组转换为字符串;
String str3 = new String(char1,2(起始),5(结束));—将数组部份转换为字符串。
str.length().-------求字符串长度 使用函数.
str.spilt(写以什么符号拆分) — 将字符串拆分函数,返回值为字符串数组.
str.replace(字符串1,字符串2);----将str里面的字符串1替换成字符串2;
str.subString(index)------从指定索引截取到结尾。
str.subString(index a,index b);----截取从a开始,b个字符。
str.indexOf(index)—从头开始查找指定字符串的位置,查到了返回位置的开始索引,如果查不到返回-1.
在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为append()方法:
StringBuffer sb = new StringBuffer(); —StringBuffer 使用方法。(比较两个字符串必须用equals()函数且使用.toString函数)。
String和StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer的内容可以修改。频繁修改字符串的
情况考虑使用StingBuffer。
字符串反转:.reverse()(自身的值发生改变)
删除指定范围的数据:.delete(int start, int end)
插入数据:. insert(int offset, 各种数据类型 b) ----offest代表从哪个位置开始插入数据,b代表你要插入什么数据。
注意:String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:
String变为StringBuffer:利用StringBuffer的构造方法或append()方法
StringBuffer变为String:调用toString()方法。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    public String replaceSpace (String s) {
        // write code here
        return s.replace(" ","%20");
    }
}

JZ18 二叉树的镜像
链接: 题目链接.

在这里插入图片描述

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return TreeNode类
     */
    public TreeNode Mirror (TreeNode pRoot) {
        // write code here
        if(pRoot == null){
            return null;
        }
        if(pRoot.left == null && pRoot.right == null){
            return pRoot;
        }
        TreeNode temp = pRoot.left;
        pRoot.left = pRoot.right;
        pRoot.right = temp;
        Mirror(pRoot.left);
        Mirror(pRoot.right);
       
        return pRoot;
    }
}

相似题型:
对称二叉树
链接: 题目链接.
在这里插入图片描述

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
     public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree){
         if(leftTree == null && rightTree == null){
             return true;

         }
         if(leftTree == null || rightTree == null){
             return false;
         }
         if(leftTree.val != rightTree.val){
             return false;
         }
         return isSymmetricChild(leftTree.left,rightTree.right) && isSymmetricChild(leftTree.right,rightTree.left);

     }
    public boolean isSymmetric(TreeNode root) {
        if(root == null){
            return true;
        }
        return isSymmetricChild(root.left,root.right);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值