数组 +字符串

记录自己在剑指offer刷题经验,坚持每天做几题理理思路学学算法的思想,其实啥都不会,看刷一遍能不能开拓一下先

1)二维数组中查找目标值

思路是:从二维数组的右上角或者左下角开始寻找,比如右上角开始,若值比target大;则这一列的值都将大于target所以cols-1;

若值比target小则rows+1向下一行继续收索;代码如下

考点:

1)数组的行列值   int col=array[0].length-1;
2)判断位置语句 if(array[row][col]>target){
                              col--;
                             }else{
                            row++; }    
 

public class Solution { 
    public boolean Find(int target, int [][] array) {
       if(array==null){
          return false;
        }
        int row=0;
        int col=array[0].length-1;         %列值
        while(row<array.length&&col>=0){
               if(array[row][col]==target){
               return true;
               }
              if(array[row][col]>target){       %大于目标值,删除这一列,左挪一列
                  col--;
               }else{
                row++;                     %小于目标值,删除这一行,下挪一行
               }           
         }
         return  false;
    }
}

2)替换字符串中的空格

思路是:先计算出原始字符串有多少个空格banknum,则新字符串newlength=len+2*banknum;从原str中最后一位还是判断是否为空格,是的话在新数组char末尾开始设值为newchars[index--]='0';newchars[index--]='2'; newchars[index--]='%';否则将原值复制到新数组中。记住index是一直自减的。

考点:

1)字符串给数组的赋值              newchars[index--]=str.charAt(i);
 2)数组转换成字符串进行返回   return new String(newchars);

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	if(str==null){
            return null;
        }
        int banknum=0;
        int len=str.length();
        int newlen=0;
        for(int i=0;i<len;i++){
           if(str.charAt(i)==' '){
            banknum++;                          %判断空格有多少个
           }
        }
        newlen=len+2*banknum;                   %新数组的长度
        char[] newchars=new char[newlen];         %创建长度为newlen的数组
        int index=newlen-1;
        for(int i=len-1;i>=0;i--){               %从原str最后一位开始判断是否为''
            if(str.charAt(i)==' '){
                newchars[index--]='0';            %新数组从末尾开始补充
                newchars[index--]='2';
                newchars[index--]='%';
            }
            else{
                newchars[index--]=str.charAt(i);
            }
         }
            return new String(newchars);            %返回新字符串
       }
        
    }

法二更简单,直接String.append就好了

考点:append用法

if(String.valueOf(str.charAt(i)).equals(" ")){

            sb.append("%20");}

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	StringBuilder sb=new StringBuilder();
        if(str==null){
            return null;
        }
        for(int i=0;i<str.length();i++){
        if(String.valueOf(str.charAt(i)).equals(" ")){         %判断字符串i是否为空格
            sb.append("%20");
        }else{
                sb.append(str.charAt(i));
            }
        }
           return String.valueOf(sb);
    }
}
          

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值