数组|6. N 字形变换 12. 整数转罗马数字

题目:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。(参考题解,需要再看)
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
题目链接:6. N 字形变换
时间复杂度(O(n))
解题思路:先填后读

    class Solution {
    public String convert(String s, int numRows) {
        if(numRows < 2) return s;
        List<StringBuilder> rows = new ArrayList<StringBuilder>();
        for(int i = 0; i < numRows; i++) rows.add(new StringBuilder());
        int i = 0, flag = -1;
        for(char c : s.toCharArray()) {
            rows.get(i).append(c);
            if(i == 0 || i == numRows -1) flag = - flag;
            i += flag;
        }
        StringBuilder res = new StringBuilder();
        for(StringBuilder row : rows) res.append(row);
        return res.toString();
    }
}

无需再看
题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给你一个整数,将其转为罗马数字。
题目链接: 12. 整数转罗马数字
**思路:**模拟即可

class Solution {
    public String intToRoman(int num) {
        int chushu=10;
        String result="";
        while(num>0){
            int oneofnumber=num%chushu;
            System.out.println(oneofnumber);
            num=num-oneofnumber;
            if(chushu==10){
                if(oneofnumber==0){
                    result=result;
                }
                if(0<oneofnumber&&oneofnumber<4){
                    while(oneofnumber>0){
                        result="I"+result;
                        oneofnumber=oneofnumber-1;
                    }
                }
                if(oneofnumber==4){
                    result="IV"+result;
                }
                if(4<oneofnumber&&oneofnumber<9){
                    while(oneofnumber-5>0){
                        result="I"+result;
                        System.out.println("ok");
                        oneofnumber=oneofnumber-1;
                    }
                    result="V"+result;
                }
                if(oneofnumber==9){
                    result="IX"+result;
                }
                chushu=chushu*10;
                continue;
            }
            if(chushu==100){
                if(oneofnumber==0){
                    result=result;
                }
                if(0<oneofnumber&&oneofnumber<40){
                    while(oneofnumber>0){
                        result="X"+result;
                        oneofnumber=oneofnumber-10;
                    }
                }
                if(oneofnumber==40){
                    result="XL"+result;
                }
                if(40<oneofnumber&&oneofnumber<90){
                    while(oneofnumber-50>0){
                        result="X"+result;
                        oneofnumber=oneofnumber-10;
                    }
                    result="L"+result;
                }
                if(oneofnumber==90){
                    result="XC"+result;
                }
                chushu=chushu*10;
                continue;
            }
            if(chushu==1000){
                if(oneofnumber==0){
                    result=result;
                }
                if(0<oneofnumber&&oneofnumber<400){
                    while(oneofnumber>0){
                        result="C"+result;
                        oneofnumber=oneofnumber-100;
                    }
                }
                if(oneofnumber==400){
                    result="CD"+result;
                }
                if(400<oneofnumber&&oneofnumber<900){
                    while(oneofnumber-500>0){
                        result="C"+result;
                        oneofnumber=oneofnumber-100;
                    }
                    result="D"+result;
                }
                if(oneofnumber==900){
                    result="CM"+result;
                }
                chushu=chushu*10;
                continue;
            }
            if(chushu==10000){
                if(oneofnumber==0){
                    result=result;
                }
                if(oneofnumber==1000){
                    return "M"+result;
                }
                if(oneofnumber==2000){
                    return "MM"+result;
                }
                if(oneofnumber==3000){
                    return "MMM"+result;
                }
                chushu=chushu*10;
                continue;
            }
            
        }
        return result;
    }
}

你可能感兴趣的:(代码随想录,leetcode,算法,java)