1. 题目(31)回文数
题目链接:回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
- 示例 1:
输入:x = 121
输出:true - 示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 - 示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
2. 解题思路
我们只需要求出x倒过来读的数,之后再与x进行比较就行了
那怎么求x倒过来读的数呢?
创建一个新的变量tmp,让tmp存储x的值,创建一个变量sum用来存储x倒过来读的数。
将 tmp 对 10 取模(tmp % 10),这样就可以得到 tmp 的个位数。
将 sum 乘以 10,然后加上第一步得到的个位数,将结果存储回 sum 中。
重复以上过程,直到tmp为0
之后比较sum与x是否相等
注意:别忘了负数,由题目可知负数不是回文数
3. 代码
bool isPalindrome(int x) {
//如果x为负数,直接返回
if(x<0)
return false;
int tmp = x;
long sum = 0;
//计算逆序数
while(tmp)
{
sum=sum*10 + tmp%10;
tmp/=10;
}
if(sum==x)
return true;
return false;
}
4. 题目(32)有多少小于当前数字的数字
题目链接:有多少小于当前数字的数字
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
-
示例 1:
输入:nums = [8,1,2,2,3]
输出:[4,0,1,1,3]
解释:
对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。
对于 nums[1]=1 不存在比它小的数字。
对于 nums[2]=2 存在一个比它小的数字:(1)。
对于 nums[3]=2 存在一个比它小的数字:(1)。
对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。 -
示例 2:
输入:nums = [6,5,4,8]
输出:[2,1,0,3] -
示例 3:
输入:nums = [7,7,7,7]
输出:[0,0,0,0]
提示:
2 <= nums.length <= 500
0 <= nums[i] <= 100
5. 解题思路
5.1 方法一:
暴力解法,创建一个新的数组,用它来存放比当前数字小的所有数字的个数
5.2 方法二:
例如:
num = [6,5,4,8]
sum = [0,0,0,0]
其中sum用来计数
让6与5比较,6大,让sum=[1,0,0,0]
让6与4比较,6大,让sum=[2,0,0,0]
让6与8比较,8大,让sum=[2,0,0,1]
……
最后返回sum
6. 代码
6.1 方法一
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize) {
int nums2[numsSize];
for(int i=0;i<numsSize;i++)
nums2[i]=nums[i];
for(int i=0;i<numsSize;i++)
{
int sum=0;
for(int j=0;j<numsSize;j++)
{
if(j!=i && nums2[i] > nums2[j])
{
sum++;
}
}
nums[i]=sum;
}
*returnSize = numsSize;
return nums;
}
6.2 方法二
int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize) {
int nums2[numsSize];
for(int i=0;i<numsSize;i++)
nums2[i]=nums[i];
for(int i=0;i<numsSize;i++)
nums[i]=0;
for(int i=0;i<numsSize-1;i++)
{
for(int j=i+1;j<numsSize;j++)
{
if(nums2[i]>nums2[j])
{
nums[i]++;
}
else if(nums2[i]!=nums2[j])
{
nums[j]++;
}
}
}
*returnSize = numsSize;
return nums;
}
其实两种方法都可以用malloc来使程序更加简化的,因为作者比较懒,读者可以自己改改