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;
}