[小米OJ] 9. 移除 K 位得到最小值

思路:

重复k次:

  1.找到并且删除第一个 num[i] > num[i+1] 的第i位数字。

  2.若删除过程中,序列变成递增序列,则直接删除最后一位。

注意除去字符串头的0

def solution(line):
    num, k = line.split(" ")
    for j in range(0, int(k)):
        flag = True
        for i in range(0, len(num)-1):
            if num[i] > num[i+1]:
                flag = False
                num = num[:i]+num[i+1:]
                break
        if flag:
            num = num[0:len(num)-1]
    while len(num)>0 and num[0] == ‘0‘:
        num = num[1:]
    if len(num) == 0:
        return 0
    return num

原文地址:https://www.cnblogs.com/ruoh3kou/p/10294439.html

时间: 2024-11-02 09:15:58

[小米OJ] 9. 移除 K 位得到最小值的相关文章

【LeetCode】402、移除K位数字

1.移除K位数字 题目:402. 移掉K位数字 题目描述: ??给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小.(num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零.) 示例 : 输入: num = "1432219", k = 3 输出: "1219" 解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219. 输入: num = "10200", k = 1 输

Leetcode 402. 移掉K位数字

// 贪心算法,当前遇到的数,比栈顶的元素小,就将栈顶元素给弹出,直至遇到比栈顶大或者是栈为空才停止,字符串保证是一个正常的数字序列.class Solution { public: string removeKdigits(string num, int k) { std::vector<int> S;//为了遍历,因此可以用vector来进行模拟. std::string result = "";// 保存最后的结果 for(int i=0; i<num.size

算法46----移除K位数字

一.题目:移除K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: num = "1432219", k = 3 输出: "1219" 解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219. 示例 2 : 输入: num = "10200", k = 1 输出: "

把一个数组向右循环移动k位要求时间复杂度为O(n)

今晚做了下某公司的网络笔试题,好久没刷题了,现在渣得要死,里面有道程序设计题是 把一个数组向右循环移动k位要求时间复杂度为O(n) 给的方法定义为 public void solution(int a[],int length,int k) 我当时觉得挺容易的,结果一写出来发现只能移一位... public void solution(int []a,int length,int k){ int temp=a[length-1]; for(int j=length-1;j>0;j--){ a[j

实现将一维数组A(下标从1开始)中的元素循环右移k位,要求只用一个元素大小的辅助空间

#include<stdio.h>main(){ int n,arrary[50],k,temp; printf("请输入数组元素个数:\n"); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&arrary[i]); printf("请输入数组需要向后移动的大小:\n"); scanf("%d",&k);if(k

贪心算法-移除K个数字

1.题目描述 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 2.题目分析: 题目简介明了,就是把给定的数字删除指定个数的数字使删除之后的数字是同等位数数字中最小的那个.但是需要注意的是,题目中给的数字是字符串的形式并且输出结果也是字符串的形式,这就涉及到字符串和数字之间的相互转化问题. 题目中要求删除的数字个数是不确定的,那么我们可以根据数学知识先分析当我们删除一个数字

找到链表的倒数第K位

#include<iostream> using namespace std; class node{ public: node():value(0),next(NULL){} ~node(){} int value; node* next; };///be careful this ; node* createlist(int a[],int n) { node* startnode = new node[n]; node* ret = startnode; for(int i = 0;i&

[LeetCode] Remove K Digits 去掉K位数字

Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible. Note: The length of num is less than 10002 and will be ≥ k. The given num does not contain any leading zero. Ex

rqnoj 相同的后k位

题目描述 路人甲给你出了一道奇怪的问题,他给你了一个正整数L,他想知道当正整数m,n为何值时,L^m与L^n的最后K位数字相同. 路人甲考虑到可能会有很多组解,你只需要告诉他最小的m,n且0<n<m. 输入格式 一个正整数L,一个正整数k 输出格式 输出一个最小的m,n 样例输入 样例输出 注释 [数据规模及约定] 100<=L<=9999 1<=k<=4 #include<iostream> #include<cstdio> #include&