Java题目、递归

这篇博客探讨了如何使用Java解决一系列编程题目,包括字符串替换、约瑟夫环问题、顺时针输出矩阵、二分查找和二维有序方阵查找。每个问题都提供了多种思路,重点讲解了如何运用递归解决斐波拉契数列和汉诺塔问题。通过这些实例,读者可以深入理解Java编程中的递归思想。
摘要由CSDN通过智能技术生成

Java题目

1、 将字符串中指定的全部相同字符替换为其他长度字符串。
思路一:

先将字符串转为字符数组,从前向后寻找要替换的字符个数,通过计算得到新字符数组的长度,创建新字符数组后从前向后依次为新字符数组每个元素赋原字符数组对应位置的值,若为要替换的字符,将对应位置及之后的几个元素赋所需字符串的对应字符。开始的计算保证了之后新的字符数组没有空位,数组长度不流失浪费。这里给出方法,在其他地方调用,更改相应参数即可。应注意循环变量对数组索引和边界的控制。

public static char[] change1(String str, char chfrom, String chto){
    char[] chararr = str.toCharArray();
    char[] charin = chto.toCharArray();
    int counter = 0;
    for(int i = 0;i<chararr.length;i++){
        if(chararr[i] == chfrom){
            counter++;
        }
    }
    int newlength = chararr.length + counter * (chto.length() - 1);
    char[] charnew = new char[newlength];                            
    for(int i = 0,k = 0;i<newlength;i++,k++){                        
        if(chararr[k] == chfrom){
            for(int j = 0;j<chto.length();j++,i++){
                charnew[i] = charin[j];
            }
            i--;
        }
        else
            charnew[i] = chararr[k];
    }
    return charnew;                                 
}
思路二:

将字符串转为字符数组,创建一个同长的字符串数组,依次为字符串数组各元素赋值,由于一个元素现在可以容纳多个字符,当原字符数组到了要替换的字符时,将对应字符串数组元素变为要替换的字符串。这个方法算是我狗急跳墙想出来的,不能算是好方法,由于得到的是字符串数组,还需引用之后或在本方法中,或在调用区域中,将其转为字符串或字符数组。

public static String[] change2(String str, char chfrom, String chto){
    String[] strarr = new String[str.length()];
    for(int i = 0;i<str.length();i++) {
        if (str.charAt(i) == chfrom) {
            strarr[i] = chto;
        } else {
            strarr[i] = String.valueOf(str.charAt(i));
        }
    }
    return strarr;
}
思路三:

只用一个字符数组不创建新字符数组,新字符数组长度与上两种方法相同。靠复制得到的新数组,在原数组的后面填充了空白,所以只需遍历新字符数组的有效长度,即原先字符数组的长度即可,要想能遍历新数组,我添加了一个变量moveNum,经历一个需要改动的字符元素,moveNum减少要填充的字符串长度减一的长度,保证能够做到对应,最后开头可以重合。

public static char[] change5(String str, char chfrom, String chto){
    char[] chararr = str.toCharArray();
    int count = 0;
    int oldLength = chararr.length;
    for(int i = 0;i<oldLength;i++){
        if(chararr[i] == chfrom){
            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值