由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 好不容易写了个bug free, 可是被说会秒据, 帮看看
相关主题
leetcode上最搞笑的是这题a2z(amazon 子公司)电面题目
一道面试题(integer to binary string)问个考古的题
问个java hashcode的题贡献G家电面面经
问一个facebook的电面lintcode delete digits怎么做?
问下LeetCode上的题目:count and say一道很简单的面试题,但是不知道哪个算法好
Google 电面也贴个转罗马数字的code
请教一道G的电面题。。leetcode: integer to roman 结果不同
问道google面试题纽约附近小公司电面 Amplify;MLB;Portware;Saks,BOA
相关话题的讨论汇总
话题: num话题: string话题: else话题: int话题: rom
进入JobHunting版参与讨论
1 (共1页)
c********t
发帖数: 5706
1
Leetcode Integer to Roma
看完题,读了一下wiki,好像不那么复杂,行云流水写下如下code,竟然很少有的bug
free,沾沾自喜。查查别人的解法,有人说写成我这样会被面试官直接送回家。
帮我看看,至于吗?有啥问题?
public String intToRoman(int num) {
// Start typing your Java solution below
// DO NOT write main() function
StringBuilder sb = new StringBuilder();
while (num > 0) {
if (num >= 1000) {
sb.append('M');
num -= 1000;
} else if (num >= 900) {
sb.append("CM");
num -= 900;
} else if (num >= 500) {
sb.append('D');
num -= 500;
} else if (num >= 400) {
sb.append("CD");
num -= 400;
} else if (num >= 100) {
sb.append('C');
num -= 100;
} else if (num >= 90) {
sb.append("XC");
num -= 90;
} else if (num >= 50) {
sb.append('L');
num -= 50;
} else if (num >= 40) {
sb.append("XL");
num -= 40;
} else if (num >= 10) {
sb.append('X');
num -= 10;
} else if (num >= 9) {
sb.append("IX");
num -= 9;
} else if (num >= 5) {
sb.append('V');
num -= 5;
} else if (num >= 4) {
sb.append("IV");
num -= 4;
} else {
sb.append('I');
num--;
}
}
return sb.toString();
}
C***U
发帖数: 2406
2
用table 会好看很多
我开始也是这样写的
但是看过table写法 都不好意思看自己写的了

【在 c********t 的大作中提到】
: Leetcode Integer to Roma
: 看完题,读了一下wiki,好像不那么复杂,行云流水写下如下code,竟然很少有的bug
: free,沾沾自喜。查查别人的解法,有人说写成我这样会被面试官直接送回家。
: 帮我看看,至于吗?有啥问题?
: public String intToRoman(int num) {
: // Start typing your Java solution below
: // DO NOT write main() function
: StringBuilder sb = new StringBuilder();
: while (num > 0) {
: if (num >= 1000) {

l*******b
发帖数: 2586
3
string intToRoman (int num) {
map t;
t[1000] = 'M';
t[500] = 'D';
t[100] = 'C';
t[50] = 'L';
t[10] = 'X';
t[5] = 'V';
t[1] = 'I';
string rom = "";
int k = 1000;
while (k > 0) {
int q = num / k;
if(q < 4)
for(; q > 0; q--)
rom += t[k];
else if (q == 4) {
rom += t[k];
rom += t[k*5];
}
else if (q == 5)
rom += t[k*5];
else if (q < 9) {
rom += t[k*5];
for(; q > 5; q--)
rom += t[k];
}
else {
rom += t[k];
rom += t[k*10];
}
num %= k;
k /= 10;
}
return rom;
}
应该也不是table的写法。。。不知道怎样
x*********s
发帖数: 2604
4
用backtracking会更简洁些
Q*******e
发帖数: 939
5
没哈, 先Native, 然后优化
回字的写法不同而已
k****r
发帖数: 807
6
我看到的解法中也是二维array的方法最好看了,
把 1 2 3 4 5 6 7 8 9啥的都存成 I II III, 。。。
然后判断,看的清楚,写的也方便
j*****s
发帖数: 189
7
class Solution {
public:
string intToRoman(int num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
string s;
s += toRoman(num / 1000, "", "", "M");
s += toRoman(num / 100 % 10, "M", "D", "C");
s += toRoman(num / 10 % 10, "C", "L", "X");
s += toRoman(num % 10, "X", "V", "I");
return s;
}
string toRoman(int val, string ten, string half, string one){
string res;
if(val == 0){
return res;
}
if(val > 0 && val <= 3){
for(int i = 0; i< val; ++i){
res += one;
}
}
else if(val == 4){
res = one + half;
}
else if(val == 5){
res = half;
}
else if(val > 5 && val < 9){
res = half;
for(int i = 0; i< val - 5; ++i){
res += one;
}
}
else{
res = one + ten;
}
return res;
}
};
这样有没有简洁一些。
c*****a
发帖数: 808
8
忘了哪里看的。。。我保存着
public String intToRoman(int num) {
String digit[] = new String[]{"", "I","II","III","IV", "V","VI","VII
","VIII","IX"};
String ten[] = new String[]{"", "X","XX","XXX","XL","L","LX","LXX",
"LXXX","XC"};
String hundred[] = new String[]{"", "C", "CC", "CCC", "CD", "D", "DC
", "DCC", "DCCC", "CM"};
String thousand []= new String[] {"", "M", "MM", "MMM"};
StringBuffer result = new StringBuffer();
if(num >3999)
num = 3999;
if(num<0)
num = 0;
result.append(thousand[num/1000]);
result.append(hundred[num/100 %10]);
result.append(ten[num/10 %10]);
result.append(digit[num%10]);
return result.toString();

}
c********t
发帖数: 5706
9
恩,确实简洁!
多谢!

★ 发自iPhone App: ChineseWeb 7.7

【在 c*****a 的大作中提到】
: 忘了哪里看的。。。我保存着
: public String intToRoman(int num) {
: String digit[] = new String[]{"", "I","II","III","IV", "V","VI","VII
: ","VIII","IX"};
: String ten[] = new String[]{"", "X","XX","XXX","XL","L","LX","LXX",
: "LXXX","XC"};
: String hundred[] = new String[]{"", "C", "CC", "CCC", "CD", "D", "DC
: ", "DCC", "DCCC", "CM"};
: String thousand []= new String[] {"", "M", "MM", "MMM"};
: StringBuffer result = new StringBuffer();

c********t
发帖数: 5706
10
Backtracking怎么解?

★ 发自iPhone App: ChineseWeb 7.7

【在 x*********s 的大作中提到】
: 用backtracking会更简洁些
相关主题
Google 电面a2z(amazon 子公司)电面题目
请教一道G的电面题。。问个考古的题
问道google面试题贡献G家电面面经
进入JobHunting版参与讨论
b***m
发帖数: 5987
11
呵呵,给楼主一个窍门:空间换时间。
f******t
发帖数: 32
12
程序的readability很重要。写出bug free是第一步。如果我是面试官,在你写完这个
程序后,我会问你怎么样能够改写code来增加程序的readability。

【在 c********t 的大作中提到】
: Leetcode Integer to Roma
: 看完题,读了一下wiki,好像不那么复杂,行云流水写下如下code,竟然很少有的bug
: free,沾沾自喜。查查别人的解法,有人说写成我这样会被面试官直接送回家。
: 帮我看看,至于吗?有啥问题?
: public String intToRoman(int num) {
: // Start typing your Java solution below
: // DO NOT write main() function
: StringBuilder sb = new StringBuilder();
: while (num > 0) {
: if (num >= 1000) {

p*****2
发帖数: 21240
13

这个跟我得解法差不多。

【在 j*****s 的大作中提到】
: class Solution {
: public:
: string intToRoman(int num) {
: // Start typing your C/C++ solution below
: // DO NOT write int main() function
: string s;
: s += toRoman(num / 1000, "", "", "M");
: s += toRoman(num / 100 % 10, "M", "D", "C");
: s += toRoman(num / 10 % 10, "C", "L", "X");
: s += toRoman(num % 10, "X", "V", "I");

m**********0
发帖数: 356
14
这个。。。你平时这么写code的?peer review没人提意见么?

【在 c********t 的大作中提到】
: Leetcode Integer to Roma
: 看完题,读了一下wiki,好像不那么复杂,行云流水写下如下code,竟然很少有的bug
: free,沾沾自喜。查查别人的解法,有人说写成我这样会被面试官直接送回家。
: 帮我看看,至于吗?有啥问题?
: public String intToRoman(int num) {
: // Start typing your Java solution below
: // DO NOT write main() function
: StringBuilder sb = new StringBuilder();
: while (num > 0) {
: if (num >= 1000) {

s**x
发帖数: 7506
15
这种写法应该被 microsecond 据。
重复的代码, 重复的逻辑.
O******i
发帖数: 269
16
太多并列的if else语句应该是大忌吧,再不济也应该用switch case

【在 c********t 的大作中提到】
: Leetcode Integer to Roma
: 看完题,读了一下wiki,好像不那么复杂,行云流水写下如下code,竟然很少有的bug
: free,沾沾自喜。查查别人的解法,有人说写成我这样会被面试官直接送回家。
: 帮我看看,至于吗?有啥问题?
: public String intToRoman(int num) {
: // Start typing your Java solution below
: // DO NOT write main() function
: StringBuilder sb = new StringBuilder();
: while (num > 0) {
: if (num >= 1000) {

c********t
发帖数: 5706
17
thx!

【在 b***m 的大作中提到】
: 呵呵,给楼主一个窍门:空间换时间。
d*********g
发帖数: 154
18
贴个我写的:
private static final char[] romanLetters = {'I', 'V', 'X', 'L', 'C', 'D', 'M
'};
public String intToRoman(int num)
{
String result = "";
int index = -1;
while(num > 0)
{
int digit = num % 10;
num /= 10;
++index;
if(digit == 0) continue;

result = processDigit(digit, index) + result;
}
return result;
}
private String processDigit(int digit, int index)
{
String digitResult = "";

if(digit == 4 || digit == 9)
{
digitResult += romanLetters[index*2];
digitResult += (digit == 4 ? romanLetters[index*2+1] : romanLetters[
index*2+2]);
}
else
{
int minusFiveOrNot = digit <= 3 ? 0 : 5;
digitResult += (digit <= 3 ? "" : romanLetters[index*2+1]);
for(int i = 1; i <= digit-minusFiveOrNot; ++i)
digitResult += romanLetters[index*2];
}
return digitResult;
}
m****t
发帖数: 2329
19
re
1 (共1页)
进入JobHunting版参与讨论
相关主题
纽约附近小公司电面 Amplify;MLB;Portware;Saks,BOA问下LeetCode上的题目:count and say
int to roman 这么做能过关么?Google 电面
拿到offer后 奇葩事。请教一道G的电面题。。
贡献个题问道google面试题
leetcode上最搞笑的是这题a2z(amazon 子公司)电面题目
一道面试题(integer to binary string)问个考古的题
问个java hashcode的题贡献G家电面面经
问一个facebook的电面lintcode delete digits怎么做?
相关话题的讨论汇总
话题: num话题: string话题: else话题: int话题: rom