背景
我参加一个外包面试, 面试前有个笔试题, 笔试题放在word文档里面,需要在30分钟内写完题目转交给hr, 1天后给反馈, 我看题目也比较简单差不多10~20分钟左右就写完代码了, 等了一天反馈说笔试挂了, 我也不知道挂在哪个地方,它这个不是线上笔试,不知道是哪个测试用例挂了, 帮忙看看哪个地方有问题呀, 说不定后面你也会遇到这个题目
第一题
问题:实现 compareVersion 方法,用于比较两个版本号(version1、version2)
如果version1 > version2,返回1;
如果version1 < version2,返回-1;
其他情况,返回0。 版本号规则`x.y.z`,xyz均为大于等于0的整数,至少有x位
例如:
compareVersion('0.1', '1.1.1') // 返回-1
compareVersion('13.37', '1.2 ') // 返回1
compareVersion('1.1', '1.1.0'); // 返回0
compareVersion('1.1', '1.1.1'); // 返回-1
第一题的实现
function compareVersion(version1, version2) {
// ... 这里写代码实现
version1 = version1 + ''
version2 = version2 + ''
let arr1 = version1.split('.').map((item) => parseInt(item))
let arr2 = version2.split('.').map((item) => parseInt(item))
let res = 0
for (let i = 0; i < 3; i++) {
let num1 = arr1[i] || 0
let num2 = arr2[i] || 0
if (num1 > num2) {
res = 1
break
}
if (num1 < num2) {
res = -1
break
}
}
return res
}
第二题
问题:井字棋游戏。输入一个二维数组代表棋盘,其中『1』代表当前玩家的棋子,『0』代表没有棋子,『-1』代表对方玩家的棋子。 若一方棋子在横、竖、斜方向连成排则为获胜,返回当前玩家是否胜出。示例:入参为 [[1,0,1],[1,-1,-1],[1,-1,0]] 时,返回 true
第二题的实现
function gameCheck(arr) {
// ... 这里写代码实现
for (let i = 0; i < 3; i++) {
let lineCount = 0
let rowCount = 0
for (let j = 0; j < 3; j++) {
if (arr[i][j] === 1) {
lineCount++
}
if (arr[j][i] === 1) {
rowCount++
}
}
if (lineCount >= 3 || rowCount >= 3) {
return true
}
}
if (arr[1][1] === 1) {
if (arr[0][0] === 1 && arr[2][2] === 1) {
return true
}
if (arr[0][2] === 1 && arr[2][0] === 1) {
return true
}
return false
} else {
return false
}
}