斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n) 。
int fib(int n){ int f[31],i; f[0] = 0; f[1] = 1; for(i=2;i<=n;++i){ f[i] = f[i-1] + f[i-2]; } return f[n]; }
泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
int tribonacci(int n){ int f[38] ; f[0] = 0; f[1] = f[2] = 1; for(int i = 3; i <= n; i++){ f[i] = f[i-1] + f[i-2] + f[i-3]; } return f[n]; }
求
1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。int sumNums(int n) { n && (n += sumNums(n - 1)); return n; }
//&&可以相当于if 例: a < 1 && a = 5 ====>if(a < 1){ a = 5; }
如果数组是单调递增或单调递减的,那么它是 单调 的。
如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。
当给定的数组 nums 是单调数组时返回 true,否则返回 false。
bool isMonotonic(int* nums, int numsSize){ int i; for(i = 1;i<numsSize;++i){ if(nums[0]<nums[numsSize-1]){ if(nums[i]>=nums[i-1]){ //注意此处的判断符号 continue; }else{ return false; } }else if(nums[0]>nums[numsSize-1]){ if(nums[i]<=nums[i-1]){//此处也注意 continue; }else{ return false; } }else{//题目中i>=j,nums[i]>=nums[j],可以都是相等的情况 if(nums[i]!=nums[0]){ return false; } } } return true; }
给你一个以行程长度编码压缩的整数列表 nums 。
考虑每对相邻的两个元素 [freq, val] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一对都表示解压后子列表中有 freq 个值为 val 的元素,你需要从左到右连接所有子列表以生成解压后的列表。
请你返回解压后的列表。
/** * Note: The returned array must be malloced, assume caller calls free(). */ int* decompressRLElist(int* nums, int numsSize, int* returnSize){ int i,j,k=0; *returnSize = 0; for(i = 0;i<numsSize;i+=2){ *returnSize+=nums[i]; } int *ret = (int*)malloc(sizeof(int)*(*returnSize)); for(i = 0;i<numsSize;i+=2){ for(j=0;j<nums[i];j++){ ret[k++] = nums[i+1]; } } return ret; }
给定一个正整数
n
,返回 连续正整数满足所有数字之和为n
的组数 。int consecutiveNumbersSum(int n){ int i,res=0; for(int i=sqrt(2*n);i>=1;i--){ if((n-(i*(i-1)/2))%i==0)res++; } return res; }
利用等差数列求和公式,即为k*i + (i*(i-1)/2) == n 成立的时候,这个连续的i个数即满足要求。那么我们只需要枚举i, 检查此时k是否为整数即可 。如果k为整数,我们就得到了一个最小的那个数为k,总长度为i且和为n的数列了。而我们k的最小值是1, 所以可以把1带进去可以求得i的上限 ,大概为sqrt(2*n) .