目录
1.各位相加

cpp
int addDigits(int num) {
while(1){
int sum=0;
while(num){
sum=sum+num%10;//一直加个位
num=num/10;
}
num=sum;
if(sum<10){
return sum;
}
}//of while
}
2.n的第k个因子

cpp
int kthFactor(int n, int k) {
int j=0;
for(int i=1;i<=n;i=i+1){
if(n%i==0){
j=j+1;
}
if(k==j){
return i;
}
}
return -1;
}
//在循环中满足一定的条件然后退出这种思想,非常重要。
3.有效的完全平方数

cpp
bool isPerfectSquare(int num) {
long i=1;
for(;i<=num;i++){
if (i * i > num)
break;
if(i*i==num){
return true;
}
}
return false;
}
4.爬楼梯

cpp
int climbStairs(int n) {
int a[46];
a[0]=1;
a[1]=1;
for(int i=2;i<=n;i++){
a[i]=a[i-1]+a[i-2];
}
return a[n];
}
//递归的思想非常重要,如何做到问题简单化,具体分析
int climbStairs(int n) {
if(n <= 3)
{
return n;
}
else
{
return climbStairs(n-1) + climbStairs(n-2);
}
}
5.绝对值为k的数对数目

cpp
int countKDifference(int* nums, int numsSize, int k) {
int a=0;
for(int i=0;i<numsSize;i++){
for(int j=i+1;j<numsSize;j++){
if(abs(nums[i]-nums[j])==k){
a++;
}
}
}
return a;
}
//引用库#include <stdlib.h>
/*
abs(x):整数x的绝对值。abs( int x );int abs(int x) ;!!!
fabs(x):浮点数(小数)x的绝对值。fabs( double x );double fabs(double x),精确到双精度浮点型。
pow(a, x):a的x次方,即a^x,a和x是浮点数,返回值是浮点数(即使a和x都是整数,也会被转换成浮点数,因此整数运算可能损失精度,造成误差)。!!!
exp(x):e的x次方,即e^x,x是浮点数,e是自然对数的底数(一个无理数,值为2.71828。.)
*/
6.拿硬币

cpp
int game(int* guess, int guessSize, int* answer, int answerSize){
int i=0;
int j=0;
while(i<guessSize){
if(guess[i]==answer[i]){
j++;
}
i++;
}
return j;
}
7.重新排列数组

cpp
//1.刚开始做的时候脑阔很复杂,取出来之后再插入,其实可以直接插入的
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* shuffle(int* nums, int numsSize, int n, int* returnSize){
int* p=(int*)malloc(sizeof(int*)*n*2);
int a[numsSize/2];
int b[numsSize/2];
for(int i=0;i<numsSize/2;i++){
a[i]=nums[i];
}
int j;
int i;
int k;
for(i=(numsSize/2),j=0;i<numsSize;i=i+1,j++){
b[j]=nums[i];
}
for(i=0,j=0,k=0;i<numsSize;i++){
if(i%2==0){
p[i]=a[j];
j++;
}else{
p[i]=b[k];
k++;
}
}
* returnSize=numsSize;
return p;
}
cpp
int* shuffle(int* nums, int numsSize, int n, int* returnSize){
int* p=(int*)malloc(sizeof(int*)*n*2);
for(int i=0;i<numsSize;i++){
if(i%2==0){//偶数位是前x1--xn
p[i]=nums[i/2];
}else{
p[i]=nums[(i-1)/2+n];
}
}
* returnSize=numsSize;
return p;
}
/*今天学到了一种另外一种判别奇偶的方法
if(i&1){
i为奇数
}else{
i为偶数
}
*/
8.一维数组的动态和

cpp
int* runningSum(int* nums, int numsSize, int* returnSize){
int* a=(int *)malloc(sizeof(int)*numsSize);
for(int j=0;j<numsSize;j++){
a[j]=0;
}//数组建议初始化,否则会出现脏数据
for(int i=0;i<numsSize;i++){
for(int j=0;j<=i;j++){
a[i]=a[i]+nums[j];
}
}
* returnSize=numsSize;
return a;
}//其实O(n^2)的时间复杂度很复杂了
cpp
int* runningSum(int* nums, int numsSize, int* returnSize){
int *ret = (int *)malloc(sizeof(int) * numsSize);
for(int i = 0; i < numsSize; i++){
if(i == 0){
ret[0] = nums[0];
}else{
ret[i] = ret[i-1] + nums[i];}
}
* returnSize = numsSize;
return ret;
}
//这种就是直接循环一次,想到了本项就是前一项与原数组本项的和
9.动态口令

cpp
char* dynamicPassword(char* password, int target) {
char* a = (char*)malloc(sizeof(char) * target);
for(int i = 0; i < target; i++) {
a[i] = password[i];
}
int len = strlen(password);
for(int i = target; i < len; i++) {
password[i - target] = password[i];
}
for(int i = len - target; i < len; i++) {
password[i] = a[i - len + target];
}
return password;
}
//真的是数据结构学迷糊了,天天想着移动顺序表
看看别人是怎么解的,真的据聪明,
cpp
char* dynamicPassword(char* password, int target) {
int i;
int n=strlen(password);
char *ret=(char *)malloc((n+1) * sizeof(char));
for(i=0;i<n;++i)
{
ret[i]=password[(i+target)%n];
}
ret[n]='\0';
return ret;
}
//真的不理解为什么最后要加上\n来结束字符串