LeetCode——罗马数字转换整数&&

一.罗马数字转换整数

题目描述如下:

代码如下:

int romanToInt(char* s) {
    int l,i,t,sum=0,m=0;
    l=strlen(s);
    for(i=0;i<l;i++)
    {
    	switch(s[i])
    	{
    		case 'I' :
    			t=1;
    			break;
    		case 'V' :
			    t=5;
				break;
			case 'X' :
			    t=10;
				break;
			case 'L' :
			    t=50;
				break;
			case 'C' :
			    t=100;
				break;
			case 'D' :
			    t=500;
				break;
			case 'M' :
			    t=1000;
				break;
        }		
        if(i==0)
    {
        m=t;
    }
     else if(m>=t)
	{
		sum+=m;
		m=t;
	}
	else if(m<t)
	{
		sum=sum-m;
		m=t;
	}
	}
    sum=sum+m;
	return sum;
}

解题思路如下:

    首先看到这道题我思考的是如何将罗马数字用阿拉伯数字表示,然后我运用switch.case的方式,使用了for循环对每个字母进行判断并相加,并且思考了4,9,400,900等特殊数字的输出,发现罗马数字的大小是从左到右每个字母所表示的数字加起来的,在无特殊数字(4,9,40,90)的情况下,每个字母所表示的数字都是左边的大于右边的,而有特殊数字时,特殊数字表示的方法为每个字母所表示的数字都是左边的小于右边的,这也就是本题的关键之处。当当前数字大于下一位数字时,对当前数字相加,小于时则相减。

二.爬楼梯

题目描述:

代码如下:

int climbStairs(int n) {
    int *a=(int *)malloc((n+1)*sizeof(int));
    a[0]=1,a[1]=1;
    if(n==1)
    {
        return 1;
    }
    else
    {
        for(int i=2;i<=n;i++)
        {
            a[i]=a[i-1]+a[i-2];
        }
    }
    return a[n];
}

解题思路:

在对题目和数据进行分析后,可以发现我们这是与斐波那契数列相关的一道题,我们可以利用斐波那契数列的相关性质,从第三的数字开始后的每个数字都等于前两个数字之和,一共有n个数字,但数组下标从0开始,所以应该创建一个元素大小为n+1的数组a。对a[0],a[1]进行初始化1,并对1进特判。从数组a[2]开始就可以利用循环对前两个数字相加得出结果了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值