chatGpt用途之写代码
前言:
AI真的是改变世界,最近在用chatGpt来开发东西,感觉事半功倍
尤其是在写个正则校验,实现个函数、刷个题上面真的是方便,不用自己再去找了。
备注官网地址:https://chat.openai.com/
举例:
1.写个简单筛选:
2.还可以题库刷个题:
下面这个一整截图放不下,我手动复制过来:
输入:有一个只包含数字的字符串(length<=12),对其进行3次分割,求其所有可以划分为IP地址的可能,并返回其划分ip地址的数组。输入样例:'25525511135'。输出样例:['255.255.11.135', '255.255.111.35']
回答:
以下是一个使用 JavaScript 实现的函数,可以将给定的只包含数字的字符串进行3次分割,并返回所有可以划分为 IP 地址的可能性:
1 function restoreIpAddresses(s) { 2 const result = []; 3 4 // 递归函数 5 const dfs = (parts, start, remaining) => { 6 if (parts.length === 4) { 7 // 已分割4个子串,判断是否完全用完了 s 中的所有字符 8 if (start === s.length && remaining === '') { 9 result.push(parts.join('.')); 10 } 11 return; 12 } 13 14 // 一个合法的 IP 地址段最多有 3 位数字 15 for (let i = 1; i <= 3; i++) { 16 if (start + i > s.length) { 17 // 剩余字符不足 i 位,不能作为一个 IP 地址段 18 break; 19 } 20 21 const segment = s.substring(start, start + i); 22 if (segment.length > 1 && segment.startsWith('0')) { 23 // IP 地址段不能以 0 开头(除了 0 本身) 24 break; 25 } 26 27 const num = parseInt(segment); 28 if (num >= 0 && num <= 255) { 29 // 当前字符串段 num 是合法的 IP 地址段 30 dfs(parts.concat(segment), start + i, remaining.substr(i)); 31 } 32 } 33 }; 34 35 dfs([], 0, s); 36 return result; 37 } 38 39 // 示例用法 40 console.log(restoreIpAddresses('25525511135')); 41 // 输出 ["255.255.11.135", "255.255.111.35"]
在上述代码中,我们使用了深度优先搜索(DFS)算法来递归地枚举所有可能的 IP 地址。具体来说,我们维护了一个数组
parts
,其中存储了已经分割好的子串,以及一个指针 start
,表示从字符串的哪个位置开始进行分割,以及一个字符串 remaining
,表示剩余的尚未分割的字符串。每次递归时,我们将当前指针开始的字符串分割成 1~3 个字符,尝试将其转换成数字,并判断该数字是否合法,如果合法就将其添加到 parts
中,并继续递归下一层;如果不合法就直接返回。如果已经分割好了 4 个子串,我们就检查是否使用了 s 中的所有字符,如果是,则说明找到了一个合法的 IP 地址,将其添加到结果数组 result
中。最后,函数返回所有合法的 IP 地址数组。
3.直接上算法:
输入:js实现一个单向链表反转算法
回答:
下面是使用JavaScript实现的单向链表反转算法:
1 class Node { 2 constructor(value) { 3 this.value = value; 4 this.next = null; 5 } 6 } 7 8 function reverseLinkedList(head) { 9 let previous = null; 10 let current = head; 11 12 while (current !== null) { 13 let next = current.next; 14 current.next = previous; 15 previous = current; 16 current = next; 17 } 18 19 return previous; 20 } 21 22 // 示例用法 23 // 创建链表: 1 -> 2 -> 3 -> 4 -> 5 24 const head = new Node(1); 25 head.next = new Node(2); 26 head.next.next = new Node(3); 27 head.next.next.next = new Node(4); 28 head.next.next.next.next = new Node(5); 29 30 // 反转链表 31 const reversedHead = reverseLinkedList(head); 32 33 // 遍历打印反转后的链表 34 let currentNode = reversedHead; 35 while (currentNode !== null) { 36 console.log(currentNode.value); 37 currentNode = currentNode.next; 38 }
在上述代码中,首先定义了一个Node
类表示链表的节点。每个节点具有一个value
属性和一个next
属性,next
属性指向链表中的下一个节点。
然后,定义了一个reverseLinkedList
函数,该函数接收链表的头节点作为参数,并返回反转后的链表的新头节点。该函数使用三个指针:previous
、current
和next
。开始时,previous
指针为null
,current
指针指向头节点。
然后,使用while
循环遍历链表,每次迭代时,将current
节点的next
指针指向previous
节点,然后更新指针:previous
指针变为current
节点,current
指针变为next
节点。
最后,函数返回反转后的链表的头节点。
示例中展示了一个简单的链表,并使用reverseLinkedList
函数将其反转。然后,遍历打印反转后的链表的值,以验证反转结果。
结尾:当然还有很多其他用处和玩法,后续我再使用一下再分享。
注意:国内使用需要借助部分工具。
如若离群索居
就以孤独为伴
一腔孤勇,不愿回头