回文数&&自除数&&复制带随机指针的链表
【摘要】 方法1:使用字符串的方式,将x转为字符串,然后反转比较是否和原来的字符串内容相同class Solution {public: bool isPalindrome(int x) { string s1 = to_string(x);//将原整数转为字符串 string s2 =s1; reverse(s2.begin(),s2.end());/...
方法1:使用字符串的方式,将x转为字符串,然后反转比较是否和原来的字符串内容相同
class Solution {
public:
bool isPalindrome(int x) {
string s1 = to_string(x);//将原整数转为字符串
string s2 =s1;
reverse(s2.begin(),s2.end());//反转
return s1 == s2;//比较字符串是否相同
// 注意:char* str1,*str2 不能直接str1 == str2 ,要使用strcmp比较
//但是string中重载了operator==,所以可以直接判断相同
}
};
方法2:对x不断取% 然后乘10,看得到的数是否和原来的数相同
一个数逆转:sum = sum*10 + num%10
其中num为原来的数,sum为后来的数
方法2要考虑溢出的问题!溢出值不是回文数
class Solution {
public:
bool isPalindrome(int x) {
//负数前面有负号,肯定不是回文数
if(x < 0) return false;
//溢出值肯定不是回文,考虑边界
if(x == INT_MAX || x == INT_MIN) return false;
//注意:要定义为long类型,防止溢出
long ans = x;//先记录原来的数
long num = x;
long sum = 0;//记录重新恢复的数
while(num>0)
{
sum = sum*10 + num%10;
num/=10;
}
return ans == sum;
}
};
728. 自除数
又题目含义可以得知:我们只需遍历[left,right]范围的数,判断是否是自除数即可
如何判断呢? 只需要判断当前位置的数,是否能被它的每一位数整除即可! 注意:自除数不允许包含0,即如果某一位是0,就返回false
class Solution {
public:
bool Check(int num)
{
int tmp = num;
//得到tmp的每一位进行判断,自除数可以被它的每一位整除
while(tmp)
{
int i = tmp%10;//得到tmp的最后一位
//被除数不能为0 -> 0不可以作为自除数
if(i == 0 || num%i != 0)
{
return false;
}
tmp/=10;
}
return true;
}
vector<int> selfDividingNumbers(int left, int right) {
vector<int> v;
for(int i = left;i<=right;i++)
{
if(Check(i)) v.push_back(i);
}
return v;
}
};
138. 复制带随机指针的链表
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head == nullptr)
{
return nullptr;
}
// key -> 老节点
// value->老节点的拷贝结点,新节点
unordered_map<Node*,Node*> um;//老链表的节点,新链表的节点
Node* cur = head;
while(cur)
{
um.insert(make_pair(cur,new Node(cur->val)));//把每个结点构建克隆结点,放到map中
cur = cur->next;
}
cur = head;//从头开始遍历
while(cur)
{
//cur :老结点
//um[cur]: 新结点
//um[cur]对应的就是cur节点的拷贝节点,对应的处理它的next和random指针的链接关系
um[cur]->next = um[cur->next];//新节点的next 链接cur->next对应的克隆节点
um[cur]->random = um[cur->random];//新节点的rand 链接cur->rand对应的克隆节点
cur = cur->next;
}
//返回老头部对应的新头部
return um[head];
}
};
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)