leetcode(一)C

1、左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

char *leftwordsize(char *s,int n)
{
	int i=0;
	if(n<=0||s[0]=='\0')
		return s;
	i=strlen(s);
	char *s1=malloc(sizeof(char)*(i+1));
	for(int j=0;i-n>j;j++)
	{
		s1[j]=s[n+j];
	}
	for(int k=0;k<n;k++)
	{
		s1[i-n+k]=s[k];
	}
	s1[i]='\0';
	return s1;
}

2、给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1

int numberOfSteps (int num){
	int n=0;
	if(num%2==0)
	{
		num/=2;
		n++;
	}
	else
	{
		num-=1;
		n++;
	}
return n;
}

3、小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3

int game(int* guess, int guessSize, int* answer, int answerSize){
int game=0;
for(int i=0;i<3;i++)
{
    if(guess[i]==answer[i])
    game++;
}
return game;
}

4、给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。
在这里插入图片描述

int subtractProductAndSum(int n){
    int sums=0,mul=1,result=0;
    while(n!=0){
        sums+=n%10;
        mul*=n%10;
        n/=10;
    }
    result=mul-sums;
    return result;
}

5、给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
   *returnSize=numsSize;
    if(numsSize<=0)
        return nums;
    int *s= malloc((sizeof(int))*(numsSize));
    for(int i=0;i<numsSize;i++)
    {
        s[i]=0;
        for(int j=0;j<numsSize;j++)
        {
            if(nums[i]>nums[j])
            s[i]++;
        }
    }
return s;
}

6、给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数

int findNumbers(int* nums, int numsSize){
int s;int a=0;
        for(int i=0;i<numsSize;i++)
        {   
        if (nums[i]==0) continue;
        s=0;
            while(nums[i]!=0)
            {
                s++;
                nums[i]=nums[i]/10;
            }
            if(s%2==0)
            {
                a++;
            }
        } 
return a;
}

7、给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
在这里插入图片描述

int numJewelsInStones(char * J, char * S){
int i=strlen(J);
int s=strlen(S);
int a=0;
for(int j=0;j<i;j++)
{
    for(int k=0;k<s;k++)
    {
        if(J[j]==S[k])
        a++;
    }
}
return a;
}

8、给你一个以行程长度编码压缩的整数列表 nums 。

考虑每对相邻的两个元素 freq, val] = [nums[2i], nums[2i+1]] (其中 i >= 0 ),每一对都表示解压后子列表中有 freq 个值为 val 的元素,你需要从左到右连接所有子列表以生成解压后的列表。

请你返回解压后的列表。

int* decompressRLElist(int* nums, int numsSize, int* returnSize){
    short i,j;
    *returnSize=0;
    for(i=0;i<numsSize;i=i+2) 
    {
        *returnSize=*returnSize+nums[i];
    }
    int* a=(int*)malloc(*returnSize*sizeof(int));
    for(i=0,j=0;j<*returnSize;j++)
    {
        if(nums[i]>0)
        {
            a[j]=nums[i+1];
            nums[i]--;
        }
        else
        {
            i=i+2;
            j--;
        }
    }
    return a;
}

9、给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。

char * defangIPaddr(char * address){
    int i=strlen(address);
    int k=0;
    int *a=malloc(sizeof(int)*(i+7));
    for(int j=0;j<i;j++)
        {
            if(address[j]=='.')
            {
                a[j+2*k]='[';
                a[j+2*k+2]=']';
                a[j+2*k+1]='.';
                k++;
            }
            else{
            a[j+2*k]=address[j];
            }
        }
    a[i+6]='\0';
    return a;
}

10、给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:

目标数组 target 最初为空。
按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。
重复上一步,直到在 nums 和 index 中都没有要读取的元素。
请你返回目标数组。

题目保证数字插入位置总是存在。
在这里插入图片描述


int* createTargetArray(int* nums, int numsSize, int* index, int indexSize, int* returnSize){
    *returnSize=numsSize;
    int i;
    int *a=(int *)malloc(sizeof(int)*(numsSize+1));
    for(i=0;i<numsSize;i++){
        if(i==index[i]){
            a[index[i]]=nums[i];
        }else{
            for(int j=i+1;j>index[i];j--){
                a[j]=a[j-1];
            }
            a[index[i]]=nums[i];
        }
    }
    return a;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章