java面试算法
时间: 2025-05-10 13:33:48 浏览: 15
### 常见 Java 面试算法题目及解答
#### 1. 计算台阶走法数量
给定一个楼梯有 `n` 级台阶,一次可以选择跳一步、两步或者三步,问有多少种不同的方法可以从底部到达顶部。
以下是实现该功能的一个简单递归函数:
```java
public class GoSteps {
public static int countWays(int n) {
if (n < 0) {
return 0;
} else if (n == 0) {
return 1;
} else {
return countWays(n - 1) + countWays(n - 2) + countWays(n - 3);
}
}
public static void main(String[] args) {
System.out.println(countWays(5)); // 输出结果为 13
}
}
```
此代码利用了递归来解决问题,对于每级台阶都有三种可能的选择[^3]。
---
#### 2. 统计文本文件中的总行数
编写一段程序来读取并统计指定文本文件的内容总行数。下面是一个简单的例子:
```java
import java.io.*;
public class LineCounter {
public static int countLines(String fileName) throws IOException {
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
int linesCount = 0;
while ((line = bufferedReader.readLine()) != null) {
linesCount++;
}
bufferedReader.close();
return linesCount;
}
public static void main(String[] args) {
try {
int totalLines = countLines("example.txt");
System.out.println("Total Lines: " + totalLines);
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
}
```
上述代码展示了如何通过逐行读取文件的方式来完成这一任务。
---
#### 3. 数组去重
假设有一个整型数组,要求去除其中重复的元素并将剩余的结果存入新的列表中返回。
```java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class ArrayDeduplication {
public static List<Integer> removeDuplicates(List<Integer> listWithDupes) {
HashSet<Integer> setWithoutDupes = new HashSet<>(listWithDupes);
return new ArrayList<>(setWithoutDupes);
}
public static void main(String[] args) {
List<Integer> originalList = List.of(1, 2, 2, 3, 4, 4, 5);
List<Integer> deduplicatedList = removeDuplicates(originalList);
System.out.println(deduplicatedList); // 可能输出 [1, 2, 3, 4, 5]
}
}
```
这里采用了集合类的数据结构特性来简化操作过程[^1]。
---
#### 4. 字符串反转
设计一种方式将输入字符串逆序排列后再打印出来。
```java
public class ReverseString {
public static String reverse(String inputStr) {
StringBuilder sb = new StringBuilder(inputStr);
return sb.reverse().toString();
}
public static void main(String[] args) {
String strToReverse = "hello world";
System.out.println(reverse(strToReverse)); // olleH dlroW
}
}
```
这段逻辑非常直观明了,借助内置工具快速实现了目标效果[^2]。
---
#### 5. 查找两个链表的第一个公共节点
如果存在两条单向链表相交于某一点,则它们后续所有的结点都相同;现在需要找出这个交叉位置的具体地址信息。
由于篇幅所限,在此处仅提供思路概述而非具体编码展示:先分别遍历两者获取长度差值L,接着让较长的一方先行前进距离等于|L|的位置处同步移动直至遇到匹配项为止即可判定成功找到交汇之处。
---
阅读全文
相关推荐















