有点意思的 Java 递归调用
最近在刷一些问题的时候看到有下面一个问题
上面问的是当输入的字符串为什么的时候返回 True
总结
在做题目的时候,第一次还做错了。
这是因为解答这个题目的时间只有 3 分钟,没有自己看题目
后来拿着程序跑了下。
public void testGetPut() throws Exception {
String text = "abcdef";
System.out.println(text.equals(alertText(text)));
}
private String alertText(String inputText) {
if (StringUtils.isBlank(inputText))
return inputText;
return inputText.charAt(inputText.length() - 1) + alertText(inputText.substring(0, inputText.length() - 1));
}
上面代码的运行结果如下:
如果仔细看这个问题就可以发现在子函数里面有一个递归调用。
这个可能是会比较困惑的地方。
这行代码 inputText.charAt(inputText.length() - 1)
将会返回你输入字符串的最后一个字符。
然后在使用 +
这个是 String 的字符串连接计算。
随后再递归调用了这个方法,可以看到递归调用输入的字符串为为上次使用的字符串,去掉最后一个字符的字符串。
然后在递归调用方法中又取得了最后一个字符。
通过上面的算法,我们会知道需要满足返回为 TRUE 的情况。
只有一种可能就是字符串应该需要对称排列。
所以答案应该是 :ab1221ba
只要满足对称排列就可以了,所以如果你输入:abc123321cba 这个也会返回 TRUE。
我说的对称是输入字符串从中间拆开,左右对称。
很遗憾的是,在这个题目的选择时候,我选错了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2021-09-01 POM 文件中 licenses 许可证的定义
2020-09-01 Confluence 7 伴随程序的安装