今天想试试chatgpt关于代码算法这一块儿是否好用。
判断质数
上面的代码有一点小问题,当num为2时,返回的结果是错误的,我改进了一下,并优化了一点性能
// 判断是否是素数(质数)
function isprime(number) {// 所有的负数,0,1都不是素数if (number <= 1) {return false;}// 素数总满足 6x + 1 或者 6x + 5, 除了3和2,因此反过来就可以排除掉不是素数的值if (number % 6 !== 1 && number % 6 !== 5 && number >= 5) {return false;}// 如果不是素数,那么一定有一个因数小于等于sqrt(number),一个因数大于等于sqrt(number),因此我们遍历判断就不必从1到numberfor (let i = 2; i < Math.sqrt(number) + 1; i++) {if (number % i === 0 && number !== 2) {return false;}}return true;
}
计算数的阶数
我改成了尾递归的方式
function factorial(number, acc = 1) {if (number <= 1) {return acc;}return factorial(number - 1, acc * number);
}
找出字符串出现最多的字符
看起来挺好,但没有考虑当两个字符串出现次数一样时,还有当字符串为空时的处理
// 返回一个字符串中出现字数最多的字符。
function mostChartFromString(string) {if (!string) {return "";}const object = {};let max = 0;let result = [];for (let char of string) {if (!object[char]) {object[char] = 1;} else {object[char] += 1;}if (object[char] > max) {max = object[char];result = [char];} else if (object[char] === max) {result.push(char);}}if (result.length === 1) {return result[0];} else {return result;}
}
转置矩阵
下面是我写的,但chatgpt更简洁一些。
// 转置矩阵 将二维数组的行变为列,将列变为行
function transposeMatrix(array) {// 行的数量就是二维数组中数组的数量const numberRows = array.length;// 列的数量则是二维数组中子数组的元素数量const numberCols = array[0].length;const newArray = [];// 之前有多少列,现在就构建多少个数组push到新数组中for (let i = 0; i <= numberCols - 1; i++) {const childArray = [];for (let j = 0; j <= numberRows - 1; j++) {// 新数组的第i行,就拿取旧数组每一行的第i列childArray.push(array[j][i]);}newArray.push(childArray);}return newArray;
}
实现一个函数 接受一个整数数组和一个目标整数,返回数组中两个数的下标,使得这两个数的和等于目标整数,例如:twoSum([2, 7, 11, 15], 9) 应该返回 [0, 1]。
我实现的方式和chargpt略有不同,我是通过两个相加等于目标数,chatgpt是用目标数去减,然后再在数组中检查是否能找到差,但chatgpt只能返回找到的第一组。
function twoSum(array, count) {const result = [];for (let i = 0; i < array.length; i++) {for (let j = i + 1; j < array.length; j++) {if (array[i] + array[j] === count) {result.push([i, j]);}}}if(result.length <= 1) {return result[0]} else {return result}
}
实现一个函数,接受一个二叉树的根节点作为输入,返回该二叉树的深度
chatgpt给出的代码没毛病,
function maxDepth(root) {if (!root) {return 0;}const leftDepth = maxDepth(root.left);const rightDepth = maxDepth(root.right);return Math.max(leftDepth, rightDepth) + 1;
}
总结
chatgpt返回的代码质量的确挺高,在开发过程中,可以直接让它提供代码示例或者demo,开发工程师只需要按照项目的具体要求对其进行改造即可,是一个不错的开发者助理。
也许未来chatgpt代码构建能力会远超人类。