1.7 LeetCode总结(线性表)字符串类

本文分享了多项编程挑战的解决思路与算法技巧,包括FizzBuzz、最长公共前缀、无重复字符的最长子串等经典问题的实现,以及字符串处理、版本号比较和二进制手表等实用案例。

编程总结

每每刷完一道题后,其思想和精妙之处没有地方记录,本篇博客用以记录刷题过程中的遇到的算法和技巧

在这里插入图片描述

412. Fizz BuzzI

写一个程序,输出从 1 到 n 数字的字符串表示。

  1. 如果 n 是3的倍数,输出“Fizz”;
  2. 如果 n 是5的倍数,输出“Buzz”;
    3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。

本题重点测试 sprintf函数和指向指针的指针的空间分配处理

char **fizzBuzz(int n, int* returnSize) {
   
   
	int len = 0;
	int in = n;
	int i;
	char **ret;

	ret = (char**)malloc(sizeof(char*) * n); //分配n个指针,每个指针分别指向一个地址
	*returnSize = n;

	do {
   
   
		len++;
		in /= 10;
	} while (in);

	for (i = 1; i <= n; i++) {
   
     // 0 不记录,从1开始记录
		if (i % 3 == 0 && i % 5 == 0) {
   
   
			ret[i - 1] = (char *)malloc(strlen("fizzfuzz") + 1);
			sprintf(ret[i - 1], "%s", "FizzBuzz");
		}
		else if (i % 5 == 0) {
   
   
			ret[i - 1] = (char *)malloc(strlen("Buzz") + 1);
			sprintf(ret[i - 1], "%s", "Buzz");
		}
		else if (i % 3 == 0) {
   
   
			ret[i - 1] = (char *)malloc(strlen("Fizz") + 1);
			sprintf(ret[i - 1], "%s", "Fizz");
		}
		else {
   
   
			ret[i - 1] = (char *)malloc(len + 1);
			sprintf(ret[i - 1], "%d", i);
		}
	}

	return ret;
}

14. 最长公共前缀

在这里插入图片描述
关键手法:横向扫描法

char *longestCommonPrefix(char **strs, int strsSize)
{
   
   
	int i = 0, j = 0;
	char *ret = (char *)malloc(sizeof(char) * (strlen(strs[0])+1)); // 细节啊,这里必须要分配多一个'\0'的空间才行.
	int cnt = 0;
	int flag = 0;

	if (strsSize == 1) {
   
   
		return strs[0];
	}
	// 横向扫描法,保持列不动,看字符串数组里多少个列为同字符.
	// 遇到不同的字符即退出
	for (j = 0; j < strlen(strs[0]); j++) {
   
   
		for (i = 0; i < (strsSize - 1); i++) {
   
   
			if (strs[i][j] != strs[i + 1][j]) {
   
   
				flag = 1;
				break;  // 一个break只会跳出一层
			}
		}
		if (flag == 0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值