2020年应届生华为初试笔试编程题三道(附思路及解法)。
问题1(难度:* )
三角形周长为p的直角三角形共有几个(边长为整数)?
思路:
- 周长为3、4、5或者周长为4、3、5为同一三角形,枚举时设置三角形边长依次从小到大。
- 等边直角三角形不可能存在,因为不存在直角三角形的三边长都为整数。
- 第一条边长度i<=p/3,第二条边长度j<=(p-i)/2,第三边长度p-i-j。
实现代码
1 | import java.io.BufferedReader; |
问题2(难度:*** )
5*5的矩阵给6个数是否相邻(输入包含多个算例)。
思路:
- 广度优先搜索(BFS),记录与任一数相邻的总数是否为6
实现代码
1 | import java.io.BufferedReader; |
问题3(难度:** )
两个等长字符串最少去除几个字母相同?
思路
- dp数组,可以将问题转化为求解字符串最长字串的问题。
- dp数组第一行字符串在某索引处出现与另一字符串第一个字母相同的情况,第一行在该索引之后全部置1,第一列同理。
- 字符串1第第j个字母与字符串2第i个字母相同?
dp[i][j]=dp[i-1][j-1]+1;
否则,
dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]) - 最长字串的长度记录在dp[count-1][count-1]
- 返回count-dp[count-1][count-1] ,即需要删减的字母个数
实现代码
1 | import java.io.BufferedReader; |