chatGpt用途之写代码

发布时间 2023-05-17 15:05:52作者: 不爱写代码的石健

前言:

  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函数,该函数接收链表的头节点作为参数,并返回反转后的链表的新头节点。该函数使用三个指针:previouscurrentnext。开始时,previous指针为nullcurrent指针指向头节点。

然后,使用while循环遍历链表,每次迭代时,将current节点的next指针指向previous节点,然后更新指针:previous指针变为current节点,current指针变为next节点。

最后,函数返回反转后的链表的头节点。

示例中展示了一个简单的链表,并使用reverseLinkedList函数将其反转。然后,遍历打印反转后的链表的值,以验证反转结果。

 

结尾:当然还有很多其他用处和玩法,后续我再使用一下再分享。

 
 

注意:国内使用需要借助部分工具。