QuHai互联科技 算法题部分
11、实现计算第n个斐波那契数
12、给定一个字符串编码规则,如输入字符串”Y3E12S!3”,字母后面的数字表示该字符重复几次,如果字符后没有数字则表示一个字符,最终输出转码后的字符串’YYYEEEEEEEEEEEES!!!’。试写出转码的函数,编程语言不限。
13、简述你所了解的两种或以上排序算法以及其时间复杂度
14、给定一个单向链表(给出头指针),将其翻转后输出(新的头指针)
Csharp 语言
public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } } public ListNode ReverseList(ListNode head) { ListNode prev = null; while (head != null) { ListNode next = head.next; // 记录下一个节点 head.next = prev; // 当前节点指向前一个节点 prev = head; // 将当前节点设为下一次的前一个节点 head = next; // 移动到下一个节点 } return prev; }
15、使用至少2种方法判断一个字符串是否是回文。写出代码实现,编程语言不限
Csharp 语言
1、双指针法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 判断是否回文 { class Program { public static bool IsHuiWen(string s) { for (int i = 0, j = s.Length-1; i < j; i++, j--) { if (s[i] != s[j]) { return false; } } return true; } public static void Main(string[] args) { string s = Console.ReadLine(); if (IsHuiWen(s)) { Console.WriteLine(("Yes")); } else Console.WriteLine("No"); Console.ReadKey(); } } }
2、反转函数
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 判断是否回文 { class Program { public static bool IsPalindrome(string s) { string reverseS = new string(s.Reverse().ToArray()); return s == reverseS; //首先使用 .Reverse() 方法得到一个逆序枚举器,再使用 .ToArray() 将其转换为字符数组, //最后调用 string 类型的构造方法生成一个新的字符串,即为原字符串的翻转。 } public static void Main(string[] args) { string s = Console.ReadLine(); if (IsPalindrome(s)) Console.WriteLine("Yes"); else Console.WriteLine("No"); Console.ReadKey(); } } }
输入:
aannccddfddccnnaa Yes