找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1572|回复: 4
收起左侧

[面经题目讨论] 求帮忙看看这道题问题在哪

[复制链接]

30

主题

14

精华

737

积分

超级会员

Rank: 4

积分
737
发表于 10-15-2015 02:44 PM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 Sophia 于 10-15-2015 04:45 PM 编辑
* j/ F. h: I0 {- o- u4 \; D8 [4 g; V9 `9 R
OJ 上的题目:http://www.meetcoder.com/problem.php?id=4
+ m+ w! ~8 ^& D; _; @' j- S* T: i$ }" N; s* p" L
做法:从高位往低位扫,如果遇上比高位要高的数字,则互相置换,如果最高位数字已经是最大,则不置换,扫次高位,以此类推。  Q; ~1 G6 [( |/ q( ~- V+ G
/ Y: J' y5 H8 h1 ^2 t2 T
代码:
; }3 M) m! A9 ~' I7 \- h0 K* n
  1. class Solution {$ C5 _: R, G7 R; ~1 r
  2.         public int maximizeResult(int n) {
    3 J- |. D0 z7 M8 b
  3.                 if(n<=9) return n;
    8 X; k4 y7 L7 D( T
  4.                
    * v# O" }* r- w9 m
  5.                 String t = String.valueOf(n);
    + |, K: k% y7 l& T" [7 a- i" |
  6.                 StringBuilder sb = new StringBuilder(t);
    0 E) G1 [2 W% W4 L7 m" V2 C
  7.                 for(int i=0;i<t.length();i++){
    7 G% _; `: l; ~2 ?  P  S8 m1 B
  8.                         String cu = detectNSwap(i,sb,t);& m% {1 Y8 B/ M: p/ z+ N4 C3 A8 J
  9.                         if(cu.length() > 0)9 d; z" ~5 R9 c1 p; B; t1 z
  10.                                 return Integer.parseInt(cu);
    . ~& y1 G  W/ `9 [/ b& I# Y
  11.                 }
    2 }! z; I! ]3 l; ?
  12.                 return n;( j8 V  A$ y& a. G3 \  p/ x& l
  13.                   Q+ M3 H8 t' ^) N+ W$ q
  14.         }
      `% o& M0 v- }: K7 \# i. t
  15.           M) `7 h( K) W7 s2 h. S
  16.         private String detectNSwap(int index,StringBuilder sb, String t){7 D5 v- i  t% V6 Y
  17.                 int max=index;
    9 ~9 M% [0 n* Q
  18.                 char prev = t.charAt(index);
    0 J% A1 q! F% }0 ]7 U
  19.                 for(int i=index+1;i<t.length();i++){! h+ [4 T# G7 s- N0 o( G
  20.                         char curr = t.charAt(i);" T& {! @: w0 g
  21.                         if(curr > prev){
    % v' Q0 r$ L0 L% ?* ~
  22.                                 prev = curr;& `% O8 l+ m9 z% n
  23.                                 max = i;
    ' I' p- r* J4 N2 i1 b  {
  24.                         }
    4 e- c' ~3 A" ]: X
  25.                 }
    ( M: Q' u: j4 n9 x) G2 k9 U
  26.                
    6 |' U  }+ m9 ^# ^+ k% W* q
  27.                 if(max == index) return "";; x9 F7 V& L4 W9 i4 @0 _
  28.                 ( g# d+ s/ e& L- d
  29.                 char head = t.charAt(index);
    / K* `8 g; i; c: h- k
  30.                 char swit = t.charAt(max);' ]) b+ ]% ]$ X- F" v
  31.                 sb.setCharAt(head,prev);, t  L, u4 L% s6 Y; f! ?. {
  32.                 sb.setCharAt(index,head);
    1 C; y; g3 _- q- v3 c
  33.                 4 B0 W7 e2 `# D3 v5 A2 h
  34.                 return sb.toString();
      g: e: O; n1 }
  35.         
    ; }7 F0 f" ^8 m& o) Q+ k" w  A
  36.         }  ]3 y! b7 `1 y* ]# B
  37. }
复制代码
得出来的结果是这样的,有些搞不清是什么问题,会导致空输出?
" I0 _( Y  L+ t. r3 @=================/test10.outExpected Output:964663874-----------------Your Output:
' n1 i) d5 \$ p$ ?( `0 @

781

主题

575

精华

5670

积分

顶级版主

Rank: 9Rank: 9Rank: 9

积分
5670

活跃会员热心会员优秀版主

发表于 10-15-2015 04:46 PM | 显示全部楼层
@cpcs please help~~~
我们始终相信IT会持续改造甚至创新传统行业,我们始终全面看好咱们的CS专业!
发表于 10-17-2015 11:19 AM | 显示全部楼层
我改了下你的代码 能通过了。想要的话可以联系我8 \% j3 Y8 D, V, Q7 y7 C
不过我觉得还是你自己改一下比较好。
% k% Z( t! t. E0 y/ ]1 I除了风格外(比如那个sb和t其实一样,没必要传两次吧),有两个严重的问题。8 p/ ^+ t$ m2 [& q+ [
(1) 仔细检查31行和32行,真的是你想象的行为?
+ H! [' i& o; Y5 B1 i. A, y7 c(2) 看一下122这种数输出什么?
我们始终相信IT会持续改造甚至创新传统行业,我们始终全面看好咱们的CS专业!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表