7.整数反转
*题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路:题解提到使用队列解题,尝试使用栈来解题,道理相同。
代码如下:
public class Solution
{
public int Reverse(int x)
{
int f = 1;
if (x < 0)
f *= -1;
long temp=0;
int i=0;
int z = f*x;
Stack<int> stack=new Stack<int>();
while (z!=0)
{
stack.Push(z % 10);
z = z / 10;
}
while (stack.Count != 0)
{
temp += (stack.Pop() * (long)Math.Pow(10, i));
i++;
}
if(f*temp>(Math.Pow(2,31)-1)||f*temp<-(Math.Pow(2,31)))
return 0;
return (int)(f*temp);
}
}
8.字符串转换整数
*题目描述:请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
注意:
本题中的空白字符只包括空格字符 ’ ’ 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 231 − 1 或 −231 。
思路:对首字母的各种情况进行分类即可,难点在于分类需要十分细致,否则会出现很多漏洞。
代码如下:
public class Solution {
public int MyAtoi(string str) {
str = str.Trim();
if (string.IsNullOrEmpty(str))
return 0;
if (str[0] != '-' && str[0] != '+')
{
if (str[0] < '0' || str[0] > '9')
return 0;
}
int negative = 1;
long result = 0;
Queue<int> q = new Queue<int>();
for (int i = 0; i < str.Length; i++)
{
if (str[i] == '-' && i == 0)
negative = -1;
continue;
if (str[i] == '+' && i == 0)
continue;
if (str[i] < '0' || str[i] > '9')
break;
q.Enqueue(str[i] - '0');
}
while (q.Count != 0)
{
int i = q.Dequeue();
if (i == 0 && result == 0)
continue;
if (negative == 1 && q.Count > 10)
return int.MaxValue;
if (negative == -1 && q.Count > 10)
return int.MinValue;
result += i * (long)Math.Pow(10, q.Count);
if (negative == 1 && result > int.MaxValue)
return int.MaxValue;
if (negative == -1 && result * -1 < int.MinValue)
return int.MinValue;
}
return (int)result * negative;
}
}
9.回文数
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
思路:利用栈和队列出栈(队列)顺序正好相反的特点,将整数的每一位分别存入栈和队列中,在一一出栈(队列)进行比较。
代码如下:
public class Solution
{
public bool IsPalindrome(int x)
{
if (x < 0)
return false;
Queue<int> queue = new Queue<int>();
Stack<int> stack = new Stack<int>();
while (x != 0)
{
queue.Enqueue(x % 10);
stack.Push(x % 10);
x = x / 10;
}
int len=stack.Count;
int i=0;
for (; i < len; i++)
{
if (stack.Pop() != queue.Dequeue())
break;
}
return i == len;
}
}

被折叠的 条评论
为什么被折叠?



