由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一道题
相关主题
除法有什么规律吗?不会做进制转换的人能做软件设计吗?
一道怪题 fbLC的Excel字串/数字转换题级别不止简单吧
只用加减实现整数除法,到底想考查什么?google 面经
输入一个整数,返回它二进制 的1的个数C++ 面试题疑问
M 家电面Minimum Window Substring (from leetcode)
来问一道面试题,除以很大的数G onsite面经 加求blessing
请教一道面试题昨天的MS面试
几年前G家onsite的一道题[合集] 请教一道算法面试题
相关话题的讨论汇总
话题: 26话题: string话题: num话题: input话题: int
进入JobHunting版参与讨论
1 (共1页)
k*******t
发帖数: 144
1
给你26个字母,从A-Z, 用大小为26的数组letters存放。 input为一个integer,
output为一个string. 举例如下:
input->output
0 -> A
1 -> B
2 -> C
.......
25 -> Z
26 -> AA
27 -> AB
........
51 -> AZ
676 -> AAA
677 -> AAB
..........
我用的方法就是%, /. 但遇到比较tricky的问题就是最后当input为小于26时,我要减1
,再取对应的character. 比如: input为52, 52%26 == 0, letters[0] = 'A', 当前结
果为“A”,然后update52/26=2, 用2%26==2, letter[2] == 'C', append 'C' into
the head of the string, it would be wrong as the result is "CA" while the
correct result should be "BA". 但是有些case, 比如input是675时,我写的算法是
对的。感觉绕进去出不来了。
z****e
发帖数: 54598
2
你先说说26这个这么解码
是bf还是z
i****y
发帖数: 84
3
这是rocket fuel的题吧。。
i****y
发帖数: 84
4
这是rocket fuel的题吧。。
i****y
发帖数: 84
5
这是rocket fuel的题吧。。
t*********h
发帖数: 941
6
貌似26进至 又不完全是 否则应该是BA而不是AA开头

【在 k*******t 的大作中提到】
: 给你26个字母,从A-Z, 用大小为26的数组letters存放。 input为一个integer,
: output为一个string. 举例如下:
: input->output
: 0 -> A
: 1 -> B
: 2 -> C
: .......
: 25 -> Z
: 26 -> AA
: 27 -> AB

b******7
发帖数: 92
7
26进制,注意最高位对应方式是[1-26]=>[A-Z],其他位时[0-25]=>[A-Z]。
string convert(int n)
{
assert(n >= 0);
vector r;
do{
r.push_back(n%26);
n /= 26;
}while(n > 0);
reverse(r.begin(), r.end());
if(r.size() > 1){
r[0] --;
}
string s(r.size(), ' ');
for(int i = 0; i < s.length(); i++){
s[i] = 'A' + r[i];
}
return s;
}
k*******t
发帖数: 144
8
面试时, 没问解码的事,就是给定一个数输出一个string. 26对应的就是"AA". 不知有
没有回答你的问题。

【在 z****e 的大作中提到】
: 你先说说26这个这么解码
: 是bf还是z

r*********n
发帖数: 4553
9
这就是不同numeral之间的转换吧
你可以用长除法把十进制转换成二进制,同理你可以用长除法把十进制转换成26进制,
然后再把0~25 map 到 'A' ~ 'Z'
比较tricky的地方是最高位的判定方法
1. 如果次高位是整除没有余数,则最高位要减一之后再map
2. 如果此高位不是整除,则最高位直接map
E.x
0 ~ 25, 不能被26整除,最高位由0~25直接map得到
52, 长除法的余数是[2, 0],但是此高位是整除,所以应该用[1, 0]map得到BA
26^2-1, 长除法余数是[25, 25],但是此高位不是整除,所以直接用[25, 25]map得到
ZZ
r*********n
发帖数: 4553
10
显然不对啊
输入25,你的程序返回Y,但应该是Z

【在 b******7 的大作中提到】
: 26进制,注意最高位对应方式是[1-26]=>[A-Z],其他位时[0-25]=>[A-Z]。
: string convert(int n)
: {
: assert(n >= 0);
: vector r;
: do{
: r.push_back(n%26);
: n /= 26;
: }while(n > 0);
: reverse(r.begin(), r.end());

相关主题
来问一道面试题,除以很大的数不会做进制转换的人能做软件设计吗?
请教一道面试题LC的Excel字串/数字转换题级别不止简单吧
几年前G家onsite的一道题google 面经
进入JobHunting版参与讨论
k*******t
发帖数: 144
11
运行过了,有些case通过不了,比如676输出AAA, 你写的这个算法可以通过这个case。
但是如果输入是675,跑你这个程序的输出是"YZ", the output should be "ZZ", in
this case, you do NOT need to minus one.

【在 b******7 的大作中提到】
: 26进制,注意最高位对应方式是[1-26]=>[A-Z],其他位时[0-25]=>[A-Z]。
: string convert(int n)
: {
: assert(n >= 0);
: vector r;
: do{
: r.push_back(n%26);
: n /= 26;
: }while(n > 0);
: reverse(r.begin(), r.end());

k*******t
发帖数: 144
12
如果input是28, 长除法的余数是[1, 2], 此高位不是被整除,所以直接用[1, 2]map到
"BC". In this case, the result should be "AC". 这个题目的tricky的地方就是最
高位有时要减1,有时不要。问题就是什么情况下要减1,什么情况下不要。继续求解啊。

【在 r*********n 的大作中提到】
: 这就是不同numeral之间的转换吧
: 你可以用长除法把十进制转换成二进制,同理你可以用长除法把十进制转换成26进制,
: 然后再把0~25 map 到 'A' ~ 'Z'
: 比较tricky的地方是最高位的判定方法
: 1. 如果次高位是整除没有余数,则最高位要减一之后再map
: 2. 如果此高位不是整除,则最高位直接map
: E.x
: 0 ~ 25, 不能被26整除,最高位由0~25直接map得到
: 52, 长除法的余数是[2, 0],但是此高位是整除,所以应该用[1, 0]map得到BA
: 26^2-1, 长除法余数是[25, 25],但是此高位不是整除,所以直接用[25, 25]map得到

h******s
发帖数: 86
13
题目不清楚
675就应该对应yz
然后676就是aaa了

【在 k*******t 的大作中提到】
: 如果input是28, 长除法的余数是[1, 2], 此高位不是被整除,所以直接用[1, 2]map到
: "BC". In this case, the result should be "AC". 这个题目的tricky的地方就是最
: 高位有时要减1,有时不要。问题就是什么情况下要减1,什么情况下不要。继续求解啊。

r*********n
发帖数: 4553
14
我觉得这个题有问题
[AA, BA, CA, ...,] 对应的是
[26*1, 26*2, 26*3, ...,]
但是如果是这样,那么ZA对应的就是26*26,但是26*26对应的是AAA

【在 k*******t 的大作中提到】
: 如果input是28, 长除法的余数是[1, 2], 此高位不是被整除,所以直接用[1, 2]map到
: "BC". In this case, the result should be "AC". 这个题目的tricky的地方就是最
: 高位有时要减1,有时不要。问题就是什么情况下要减1,什么情况下不要。继续求解啊。

t********y
发帖数: 14
15
这题在leetcode上you, 写了一个,
public string Translate(int n)
{
string s = string.Empty;
if (n < 0) return s;
while (n >= 0)
{
s = (char)('A' + n % 26) + s;
n = n / 26 - 1;
}
return s;
}
x***y
发帖数: 633
16
according to the rules, 675 should be YZ; then 676 should be ZA, right?
个位数是0到25, 26进制; 其他位上的数字是0到26, 27进制。
k*******t
发帖数: 144
17
同意你的说法,当时在白版上算的时候就是算的26*26对应AAA,其实这是不对的,26*
26对应的应该是ZA。

【在 r*********n 的大作中提到】
: 我觉得这个题有问题
: [AA, BA, CA, ...,] 对应的是
: [26*1, 26*2, 26*3, ...,]
: 但是如果是这样,那么ZA对应的就是26*26,但是26*26对应的是AAA

k*******t
发帖数: 144
18
你的理解是对的,675 should be YZ, 676 should be ZA.

【在 x***y 的大作中提到】
: according to the rules, 675 should be YZ; then 676 should be ZA, right?
: 个位数是0到25, 26进制; 其他位上的数字是0到26, 27进制。

d****n
发帖数: 397
19
不就是26进制的问题。

【在 k*******t 的大作中提到】
: 给你26个字母,从A-Z, 用大小为26的数组letters存放。 input为一个integer,
: output为一个string. 举例如下:
: input->output
: 0 -> A
: 1 -> B
: 2 -> C
: .......
: 25 -> Z
: 26 -> AA
: 27 -> AB

r********7
发帖数: 102
20
这道题的tricky在于 个位数 A 表示 0, 但是 十位数以上 A 表示1. 可以反着想,A
= 0,
AA = 1*26 +0. 所以如果是26进制十位就不应该有Z。 ZZ=26*26+25。 而不是 25*26+
25.
或者 0 就该表示为 AxAAAA。 反过来想想10进制也是这个道理。 0-9 10个数,等进
位时候,十位第一个是1(相当于B)。 而不是01(AA)这样算
相关主题
C++ 面试题疑问昨天的MS面试
Minimum Window Substring (from leetcode)[合集] 请教一道算法面试题
G onsite面经 加求blessing发篇面经
进入JobHunting版参与讨论
f****e
发帖数: 34
21
很久以前遇到过这题,我把这题加到oj了
http://112.124.16.117/oj/#23 (两种方式互相转换)
s***5
发帖数: 2136
22
在input integer加个1,再把26进制得到的div和module,都减掉1,搞定。
string int2str(int num) {
if(num < 0) return "";
string str;
char c;
while(num >= 26) {
int rem = (num+1) % 26;
if(rem == 0)
str = 'Z' + str;
else {
c = rem-1+'A';
str = c + str;
}
num = (num+1)/26-1;
}
c = num + 'A';
return c+str;
}

【在 k*******t 的大作中提到】
: 给你26个字母,从A-Z, 用大小为26的数组letters存放。 input为一个integer,
: output为一个string. 举例如下:
: input->output
: 0 -> A
: 1 -> B
: 2 -> C
: .......
: 25 -> Z
: 26 -> AA
: 27 -> AB

h****p
发帖数: 87
23
还是有bug test 676->ZA

【在 s***5 的大作中提到】
: 在input integer加个1,再把26进制得到的div和module,都减掉1,搞定。
: string int2str(int num) {
: if(num < 0) return "";
: string str;
: char c;
: while(num >= 26) {
: int rem = (num+1) % 26;
: if(rem == 0)
: str = 'Z' + str;
: else {

h****p
发帖数: 87
24
好像题目有错。676应该是ZA吧?
while loop里面num=(num+1)/26-1应该改成num=num/26-1吧

【在 s***5 的大作中提到】
: 在input integer加个1,再把26进制得到的div和module,都减掉1,搞定。
: string int2str(int num) {
: if(num < 0) return "";
: string str;
: char c;
: while(num >= 26) {
: int rem = (num+1) % 26;
: if(rem == 0)
: str = 'Z' + str;
: else {

1 (共1页)
进入JobHunting版参与讨论
相关主题
[合集] 请教一道算法面试题M 家电面
发篇面经来问一道面试题,除以很大的数
算法题求助请教一道面试题
搞砸了google onsite几年前G家onsite的一道题
除法有什么规律吗?不会做进制转换的人能做软件设计吗?
一道怪题 fbLC的Excel字串/数字转换题级别不止简单吧
只用加减实现整数除法,到底想考查什么?google 面经
输入一个整数,返回它二进制 的1的个数C++ 面试题疑问
相关话题的讨论汇总
话题: 26话题: string话题: num话题: input话题: int