题目难度:一星
考察点:字符串
方法:字符串
1.分析:
这个题的本质其实就是将一个字符串逆序输出,如果是负数的话,就将除了第0位的字符之后的剩余字符串逆序输出就可以了。那么就考虑首位是否为'-':
(1). 如果首位为'-',那么我们将i从[1, s.size()/2], 然后交换s[i], s[s.size()-i],此时就能达到除了第0位之外的剩余字符串逆序了,举个例子:
s = "-12345"
当i=1时,交换s[1]和s[5]即交换1和5,此时s="-52341"
当i=2时,交换s[2]和s[4]即交换2和4,此时s="-54321"
当i=3时,交换s[3]和s[3]即交换3和3,此时s="-54321"
为什么要计算到s.size()/2呢,那是因为考虑了s.size()为奇数的时候。
比如s="-1234"
当i=1时,交换s[1]和s[4]即交换1和4,此时s="-4231"
如果不考虑s.size()/2=2,那么此时就已经结束循环了,但是这样是不对的,所以要考虑s.size()/2。
即当i=2时,交换s[2]和s[3]即交换2和3,此时s="-4321"
(2). 如果首位不是'-',即是一个正数那么就正常逆序就可以了。
算法实现:
(1). 输入一个字符串s。 (2). 判断首位是否为'-',然后根据上述逆序输出字符串
2.复杂度分析:
时间复杂度:O(n)空间复杂度:O(n)
3.代码:
#include <bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; if(s[0] == '-') for(int i=1; i<=s.size()/2; i++) swap(s[i], s[s.size()-i]); else for(int i=0; i<s.size()/2; i++) swap(s[i], s[s.size()-1-i]); cout<<s<<endl; return 0; }